我知道可以使用class_eval
定义实例方法。是否可以在class_eval
?
答案 0 :(得分:4)
是的,有可能:
class Foo
end
Foo.class_eval do
def self.bar
puts "I'm a class method defined using class_eval and self"
end
def baz
puts "I'm an instance method defined using class_eval without self"
end
end
Foo.bar # => "I'm a class method defined using class_eval and self"
foo = Foo.new
foo.baz # => "I'm an instance method defined using class_eval without self"
据我所知,这是因为在class_eval
内,self
是Foo类,而def Foo.bar
会创建一个类方法。
答案 1 :(得分:0)
Foo.class_eval do
...
end
与:
相同class Foo
...
end
我们需要Module#class_eval来操作一个包含类名的变量。例如,如果:
klass = Foo
你可以写:
klass.class_eval do
...
end
而关键字class
需要一个常量。
这里class_eval
做了两件事:
self
更改为klass
(Foo
)的值;然后呢klass
相同的方式“打开”Foo
(class
)的值。