如果我有一個名爲「class User」的類,是否可以通過String調用該類?動態Ruby類的調用?
例如。
user = User.new
(正常方式)
,但我想它這樣的行爲
mystring = "User"
user = mystring.new
如果我有一個名爲「class User」的類,是否可以通過String調用該類?動態Ruby類的調用?
例如。
user = User.new
(正常方式)
,但我想它這樣的行爲
mystring = "User"
user = mystring.new
使用方法const_get
my_string = "User"
user = Object.const_get(my_string).new
您可以使用eval
執行任意dynamically-生成的代碼:
mystring = "User"
user = eval("new " + mystring)
無論如何,上述答案(至少)更安全。
請提供關於eval方法如何工作的解釋,以便以前未遇到此方法的人更清楚。 – Bobulous 2014-09-12 19:31:29
我相信你可以在這裏找到答案:ruby convert class name in string to actual class
上面似乎僅限於在Ruby on Rails的一個方法,如果你不使用Rails你可能想看看這裏:http://blog.andrewvc.com/quickly-constantize
第二個鏈接提供的代碼行似乎可行,只需在開始處替換字符串中的字符串,然後如果您對結果調用new,則可以通過調用mystring.new來初始化對象(它似乎不起作用爲'新的mystring')。
作品像魔術! – kidcapital 2014-09-12 18:53:19
很高興提供幫助。 =) – lcguida 2014-09-12 19:24:09