考虑我有一个变量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),但低级别的类都混合在一起足够接近。 –
你能解释一下为什么你想这样做,甚至可能向我们展示一些代码吗? –