ruby - 名称由字符串定义的类实例
问题描述
在'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
解决方案
您当然可以这样做,尽管正如布兰登所说,这可能不是一个好主意。这是如何做到的:
people_names.each { |name| eval("#{name} = Person.new")}
eval
接受作为参数传递的字符串并将其作为一行代码执行。因此,您可以each
为数组的每个成员执行一次。
你可能想用谷歌搜索“eval”来查看任何数量的关于它为什么是邪恶的文章。其中许多都涉及元编程(eval
是元编程的一个例子),并提出了一些好的观点。我对元编程有一种比这更温和的方法(attr_accessor
毕竟,它也是元编程的一个例子,人们一直都在使用它),但你当然可以使用eval
.
另请注意,正如几位海报所观察到的,通过将字符串大写,您将它们定义为常量。您可以在 Ruby 中更改常量的值,但每次这样做都会收到警告。
推荐阅读
- java - 我需要解释如何在这个问题上使用 printf 命令
- c# - 如何在 C# 中读取单列中没有值的 CSV 文件?
- html - 像素完美设计:如何创建一个看起来完全像 PSD 模板的网站
- xpath - 试图通过变量的 xpath 提取值,但没有得到正确的结果
- python - 卡夫卡消费者不阅读消息
- java - 如何在 Oak 存储中实现文档风味?
- java - Session.Save 是否向数据库发送请求?
- php - 如何为open id connect生成一个众所周知的配置文件?
- python - Python使用apache获取用户组
- php - 为什么 Apache 在主机更改后提供我的 PHP 文件而不是执行它们