我知道可以使用class_eval
. 是否可以在上下文中定义类方法class_eval
?
问问题
855 次
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
会创建一个类方法。self
def 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
的值;然后它klass
Foo
- 以与关键字相同的方式“打开”
klass
( ) 的值。Foo
class
于 2015-06-23T17:58:18.990 回答