我有一个程序可以创建类似于以下的类:
MyClass = Class.new do
def initialize; end
# ...
end
但我想从字符串中动态命名MyClass。因为它是一个类的名称,我想对该字符串进行分类,例如(感谢Rails方法):
"hello_world".classify # => "HelloWorld"
我不知道在纯Ruby中是否有一种方法。
谢谢
答案 0 :(得分:5)
不确定您的问题是关于构建camelcased字符串,还是关于为其分配新创建的类。因为,对于后者,您应该使用Module::const_set
方法:
class_name = 'MyClass'
#=> "MyClass"
klass = Class.new do
def foo
"foo"
end
end
#=> #<Class:0xa093a68>
Object.const_set class_name, klass
#=> Module::MyClass
MyClass.new.foo
#=> "foo"
答案 1 :(得分:4)
不,没有。这是String reference page。
你可以这样做:
"hello_world".split('_').collect!{ |w| w.capitalize }.join
您可以通过重新分类String类来轻松实现此目的。
但是,如果您出于某种原因使用Rails,则为方便起见添加classify
以及underscore
方法。我相信它仍然在Rails 3中使用。
答案 2 :(得分:0)
如果您只想从字符串名称访问该类,而不是从字符串中定义它,您也可以使用它:
MyClass = Class.new do
def test; end
# ...
end
"MyClass".constantize.test # => what you wanted ?
答案 3 :(得分:-1)
这要晚得多,但是我正在经历这个过程,并且继续使用mway的答案:
class String
def classify
self.split('/').collect do |c|
c.split('_').collect(&:capitalize).join
end.join('::')
end
end
这将允许您将名称空间添加到字符串。所以:
"api/post_comments".classify
=> "Api::PostComments"