如何将字符串文本转换为类名

时间:2010-08-26 10:04:27

标签: ruby

我有一个字符串

classname = "Text"

使用这个我想创建一个Text类的对象

现在我尝试这样做

classname = classname.constantize

我将Text作为模块而不是类。 请提出建议。

谢谢和问候

罗希特夏尔

5 个答案:

答案 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