【发布时间】:2012-05-07 05:42:27
【问题描述】:
我已经用 ruby 写了一个类,叫它Foo。现在我想创建它的一些实例。但是,我想使用存储在变量中的值作为实例的名称。
例如,变量bar的值为“ABC”。现在我想将新实例的名称命名为“ABC”作为语句 ABC = Foo.new
我能意识到这一点吗?如果可能,请告诉我如何。谢谢!!!
【问题讨论】:
我已经用 ruby 写了一个类,叫它Foo。现在我想创建它的一些实例。但是,我想使用存储在变量中的值作为实例的名称。
例如,变量bar的值为“ABC”。现在我想将新实例的名称命名为“ABC”作为语句 ABC = Foo.new
我能意识到这一点吗?如果可能,请告诉我如何。谢谢!!!
【问题讨论】:
在 Ruby 中,您也不应该害怕使用 eval(),只要您只向它提供由您(程序员)构建的数据,而不会受到不安全的外部影响。在这种情况下,
cocos = "ABC"
class_sym = :Foo
eval "#{cocos} = #{class_sym}.new"
Eval 在许多语言中名声不佳,但在 Ruby 中,它相当舒适,基本上与静态代码一样快。
【讨论】:
作为本地变量,不可以,但是可以使用instance_variable_set和朋友将创建的对象命名为实例变量。
【讨论】:
如果您真的在使用常量,也可以使用const_set:
constant = 'ABC'
Object.const_set constant.to_sym, Foo.new
【讨论】: