考慮我有一個變量class_name
。 class_name
可以保存字符串值,如blog
,comment
等基於class_name
內的值我需要創建各自的對象。如何使用Ruby中的變量內容創建對象?
如果class_name
是blog
,我需要創建一個博客對象。如何在不使用開關的情況下實現這一目標?
考慮我有一個變量class_name
。 class_name
可以保存字符串值,如blog
,comment
等基於class_name
內的值我需要創建各自的對象。如何使用Ruby中的變量內容創建對象?
如果class_name
是blog
,我需要創建一個博客對象。如何在不使用開關的情況下實現這一目標?
你會使用camelize
和constantize
方法正是如此:
klass = class_name.camelize.constantize
thing = klass.new
如果您在class_name
開始'blog'
,你klass
最終會爲Blog
。如果您的字符串實際上是'Blog'
,則:
klass = class_name.constantize
thing = klass.new
兩個camelize
和constantize
是Rails的具體,但我看到 「的Ruby-on-軌」 標記,這樣我們在Rails的土地。
我曾期待它能在rails上工作,但我從未想過會有rails功能。 Thanx,這正是我正在尋找的。 :) – Rahul
您可以使用Kernel.const_get,但是case很重要。
a = 'Blog'
b = Kernel.const_get(a).new
技術上['const_get'在模塊中](http://ruby-doc.org/core/classes/Module.html#M000485),但低級別的類都混合在一起足夠接近。 –
你能解釋一下爲什麼你想這樣做,甚至可能向我們展示一些代碼嗎? –