2014-09-12 60 views
2

如果我有一個名爲「class User」的類,是否可以通過String調用該類?動態Ruby類的調用?

例如。

user = User.new(正常方式)

,但我想它這樣的行爲

mystring = "User" 
user = mystring.new 

回答

5

使用方法const_get

my_string = "User" 
user = Object.const_get(my_string).new 
+0

作品像魔術! – kidcapital 2014-09-12 18:53:19

+0

很高興提供幫助。 =) – lcguida 2014-09-12 19:24:09

-1

您可以使用eval執行任意dynamically-生成的代碼:

mystring = "User" 
user = eval("new " + mystring) 

無論如何,上述答案(至少)更安全。

+1

請提供關於eval方法如何工作的解釋,以便以前未遇到此方法的人更清楚。 – Bobulous 2014-09-12 19:31:29

1

我相信你可以在這裏找到答案:ruby convert class name in string to actual class

上面似乎僅限於在Ruby on Rails的一個方法,如果你不使用Rails你可能想看看這裏:http://blog.andrewvc.com/quickly-constantize

第二個鏈接提供的代碼行似乎可行,只需在開始處替換字符串中的字符串,然後如果您對結果調用new,則可以通過調用mystring.new來初始化對象(它似乎不起作用爲'新的mystring')。