我知道可以使用class_eval. 是否可以在上下文中定义类方法class_eval?
2 回答
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"
据我所知,这是因为inside 是 Foo 类,doingclass_eval会创建一个类方法。selfdef Foo.bar
于 2015-06-23T04:52:23.897 回答
0
Foo.class_eval do
...
end
等同于:
class Foo
...
end
我们需要Module#class_eval来操作一个包含类名的变量。例如,如果:
klass = Foo
你可以写:
klass.class_eval do
...
end
而关键字class需要一个常数。
这里class_eval做了两件事:
- 它变为( )
self的值;然后它klassFoo - 以与关键字相同的方式“打开”
klass( ) 的值。Fooclass
于 2015-06-23T17:58:18.990 回答