我看到了代码:
class MyClass
define_method :my_method do |my_arg|
my_arg*3
end
end
obj = MyClass.new
obj.my_method(2) # => 6
当我们创建obj
时,我们尚未调用define_method
,因此不应创建my_method
。那么,为什么我们可以直接致电obj.my_method(2)
?换句话说,define_method
实例化时是MyClass
执行了吗?
答案 0 :(得分:1)
任何方法直接出现在读取的上下文中时都会执行。方法define_method
没有例外,它定义了一个方法。调用方法define_method
(因此定义方法my_method
)在第2行,即在第7行中创建obj
之前。定义的方法不是对象。< / p>
答案 1 :(得分:0)
当解释定义类的代码时,将定义该方法。
[6] pry(main)> class Foo
[6] pry(main)* puts 'in Foo'
[6] pry(main)* define_method :foo do |arg|
[6] pry(main)* puts arg
[6] pry(main)* end
[6] pry(main)* end
in Foo
=> #<Proc:0x007fcc1b176558@(pry):12 (lambda)>
[7] pry(main)> Foo.instance_methods(false)
=> [:foo]