2011-08-24 77 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),但低级别的类都混合在一起足够接近。 –

相关问题