Vla*_*ich 12 ruby module mixins
我刚刚面对这种我不太懂的行为.
module M
def foo
"module_foo"
end
end
class C
def foo
"class_foo"
end
include M
end
puts C.new.foo
Run Code Online (Sandbox Code Playgroud)
为什么C.new.foo
实际回归class_foo
?我非常确定该方法应该被模块中的方法覆盖.另一件事,取而代之"class_foo"
的super
是C.new.foo
返回`"module_foo"
实际上看起来模块在定义类实例方法之前以某种方式包含在内.你能澄清一下吗?
下面是 ruby 进行方法查找的方式:
您可以在这里找到更多详细信息:http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html
因此,为了找到一个方法,Ruby 会进入接收者的类,并从那里爬上祖先链,直到找到该方法。这种行为也称为“向右一步,然后向上”规则:向右一步进入接收者的类,然后沿着祖先链向上移动,直到找到该方法。当您在类中(甚至在另一个模块中)包含模块时,Ruby 会创建一个包装该模块的匿名类,并将匿名类插入到链中,就在包含类本身的上方。
归档时间: |
|
查看次数: |
5860 次 |
最近记录: |