首页 > 解决方案 > 名称由字符串定义的类实例

问题描述

在'pure ruby​​'(不是rails)中,给定一个类:

class Person
end

...和一个字符串数组:

people_names = ['John', 'Jane', 'Barbara', 'Bob']

如何实例化Person类,每个实例变量都命名为数组中的元素之一?

John = Person.new
Jane = Person.new
Barbara = Person.new
Bob = Person.new

标签: ruby

解决方案


您当然可以这样做,尽管正如布兰登所说,这可能不是一个好主意。这是如何做到的:

people_names.each { |name| eval("#{name} = Person.new")}

eval接受作为参数传递的字符串并将其作为一行代码执行。因此,您可以each为数组的每个成员执行一次。

你可能想用谷歌搜索“eval”来查看任何数量的关于它为什么是邪恶的文章。其中许多都涉及元编程(eval是元编程的一个例子),并提出了一些好的观点。我对元编程有一种比这更温和的方法(attr_accessor毕竟,它也是元编程的一个例子,人们一直都在使用它),但你当然可以使用eval.

另请注意,正如几位海报所观察到的,通过将字符串大写,您将它们定义为常量。您可以在 Ruby 中更改常量的值,但每次这样做都会收到警告。


推荐阅读