2011-08-24 68 views
2

考慮我有一個變量class_nameclass_name可以保存字符串值,如blog,comment等基於class_name內的值我需要創建各自的對象。如何使用Ruby中的變量內容創建對象?

如果class_nameblog,我需要創建一個博客對象。如何在不使用開關的情況下實現這一目標?

+0

你能解釋一下爲什麼你想這樣做,甚至可能向我們展示一些代碼嗎? –

回答

6

你會使用camelizeconstantize方法正是如此:

klass = class_name.camelize.constantize 
thing = klass.new 

如果您在class_name開始'blog',你klass最終會爲Blog。如果您的字符串實際上是'Blog',則:

klass = class_name.constantize 
thing = klass.new 

兩個camelizeconstantize是Rails的具體,但我看到 「的Ruby-on-軌」 標記,這樣我們在Rails的土地。

+0

我曾期待它能在rails上工作,但我從未想過會有rails功能。 Thanx,這正是我正在尋找的。 :) – Rahul

4

您可以使用Kernel.const_get,但是case很重要。

a = 'Blog' 
b = Kernel.const_get(a).new 
+0

技術上['const_get'在模塊中](http://ruby-doc.org/core/classes/Module.html#M000485),但低級別的類都混合在一起足夠接近。 –

相關問題