每当我尝试扩展 ruby 模块时,我都会丢失模块方法。 include 和extend 都不会执行此操作。考虑一下片段:
module A
def self.say_hi
puts "hi"
end
end
module B
include A
end
B.say_hi #undefined_method
无论 B 包含还是扩展 A,say_hi 都不会被定义。
有什么办法可以完成这样的事情吗?
如果您是作者module A
并且经常需要这个,你可以像这样重新创作 A:
module A
module ClassMethods
def say_hi
puts "hi"
end
end
extend ClassMethods
def self.included( other )
other.extend( ClassMethods )
end
end
module B
include A
end
A.say_hi #=> "hi"
B.say_hi #=> "hi"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)