The 关于细化状态的 Ruby 文档 http://ruby-doc.org/core-2.2.3/doc/syntax/refinements_rdoc.html:
细化仅修改类,而不修改模块,因此参数必须是类。
为什么是这样?
可以对模块进行猴子修补:
module MyModule
def my_method
"hello"
end
end
include MyModule
puts my_method # => hello
module MyModule
def my_method
"goodbye"
end
end
puts my_method # => goodbye
我确信这不是一个好主意,但如果您可以限制这样一个猴子补丁的范围,情况可能不会那么糟糕。那你为什么不能呢?
模块的细化与类的细化一样有用。考虑如何
module Foobar
refine Enumerable
def all_zero?; all? &:zero? end
end
end
比直接猴子修补更有礼貌:
module Enumerable
def all_zero?; all? &:zero? end
end
有一个实施问题 https://bugs.ruby-lang.org/issues/12534与精炼模块,现在似乎已经解决了 https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/56213.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)