test = "a"
test.class_eval do
# what is going on here???
end
答案 0 :(得分:3)
ActiveSupport将class_eval
添加到Object,因此它可以用于任何事情,而不仅仅是类。
在您的示例中,它的作用相当于:
test = "a"
class << test
# do stuff
end
Rails 2.3的实际实现如下:http://github.com/rails/rails/blob/2-3-stable/activesupport/lib/active_support/core_ext/object/singleton_class.rb
答案 1 :(得分:2)
好吧,在我的计算机上,你得到NoMethodError,因为String类没有class_eval
方法:)
答案 2 :(得分:2)
我认为在香草Ruby中,这是非法的。例如,如果你在irb中尝试它,你将得到一个NoMethodError。
在rails控制台中,可能会添加额外的方法,使字符串的行为类似于。