我有一个字符串
classname = "Text"
使用这个我想创建一个Text类的对象
现在我尝试这样做
classname = classname.constantize
我将Text作为模块而不是类。 请提出建议。
谢谢和问候
罗希特夏尔
答案 0 :(得分:17)
您可以使用:
Object.const_get( class_name )
$ irb
>> class Person
>> def name
>> "Person instance"
>> end
>> end
=> nil
>> class_name = "Person"
=> "Person"
>> Object.const_get( class_name ).new.name
=> "Person instance"
答案 1 :(得分:3)
试试这个。
Object.const_get("String")
“文字”会变成什么样取决于您的代码。如果它带有一个模块,那么Text就是一个模块,因为你不能同时拥有一个模块和一个具有相同名称的类。也许在你想要引用的另一个模块中有一个Text类?如果不了解您的代码,很难说更多。
答案 2 :(得分:2)
classname = "Text"
Object.const_set(classname, Class.new{def hello;"Hello"; end})
t = Object.const_get(classname).new
puts t.hello # => Hello
这里解释了这个技巧:http://blog.rubybestpractices.com/posts/gregory/anonymous_class_hacks.html 作者使用它来继承StandardError。
答案 3 :(得分:1)
尝试:
Kernel.const_get "Text"
对于您自己定义的模块:
MyModule.const_get "Text"
答案 4 :(得分:1)
这将返回类classname的新对象:
eval(classname).new