我有一個字符串作爲如何將字符串轉換爲文本轉換成一個類名
classname = "Text"
利用這一點,我想創建文本類的對象現在
當我嘗試這樣做
classname = classname.constantize
我將Text作爲模塊而不是類。 請提出建議。
感謝和問候
羅希特
我有一個字符串作爲如何將字符串轉換爲文本轉換成一個類名
classname = "Text"
利用這一點,我想創建文本類的對象現在
當我嘗試這樣做
classname = classname.constantize
我將Text作爲模塊而不是類。 請提出建議。
感謝和問候
羅希特
你可以使用:
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"
嘗試:
Kernel.const_get "Text"
爲了你自己定義的模塊:
MyModule.const_get "Text"
試試這個。
Object.const_get("String")
什麼「文本」將變成取決於你的代碼真的。如果它帶有一個模塊,那麼Text就是一個模塊,因爲你不能同時擁有一個模塊和一個具有相同名稱的類。也許在另一個模塊中有一個Text類可以參考?不知道更多關於您的代碼的內容很難多說。
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的子類。
。用戶輸入一個字符串,並根據該字符串,你必須實例化適當的類。檢查@OscarRyz的答案它給了我完美的解決方案。謝謝。 – Rohit 2010-08-27 05:13:20
這將返回className類的一個新對象:
eval(classname).new
感謝@OscarRyz和@Magnar如果什麼類已經被定義在其他地方,這是可以正常使用 – Rohit 2010-08-27 05:09:10