为什么 Ruby 改进只修改类,而不修改模块?

2024-04-06

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(使用前将#替换为@)

为什么 Ruby 改进只修改类,而不修改模块? 的相关文章

随机推荐