ruby - 扩展方法不是 "the Ruby way"吗?

标签 ruby methods coding-style refactoring extension-methods

在使用 C# 工作时,我发现创建扩展方法非常方便。在 Ruby 中,一个可能看起来像:

class Fixnum
  is_divisible? divisor
    self % divisor == 0
  end
end

但我没有看到人们以这种方式扩展内置类型。

非扩展方式是:

def is_divisible? dividend, divisor
  dividend % divisor == 0
end

在我看来,第二种方式更难阅读 (is_divisible?(i, 5)) 与 i.is_divisible? 5。或者甚至,i.is_divisible_by? 5

是否有更 Eloquent Ruby 式方法来做这类事情?或者第一种方法是首选方法?

最佳答案

虽然这是一个有点微不足道的例子,但猴子补丁通常没问题。最好将方法放在类的命名空间中,而不是四处漂浮。

请记住,如果您正在编写 gem 或您打算让其他人使用的东西,您的猴子补丁有可能会干扰他们的猴子补丁。

对于像这样的简单情况,为了安全起见最好避免使用它。

关于ruby - 扩展方法不是 "the Ruby way"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310387/

相关文章:

ruby - Ruby String#gsub 中反向引用的意外行为

ruby - ruby 中的 ffi 和 mri c 扩展之间的权衡是什么?

ruby-on-rails - Rails-将html模板存储在文件系统或数据库中

java - If 语句中的二维数组

java - 在 valueOf() 和 newInstance() 之间进行选择的标准是什么?

c# - 如果只需要进行微小的更改,如何在不复制完整方法的情况下实现重载?

ruby - Ruby 中基于特定文本的存在触发方法的算法

java - 为什么在 Java 中从容器类而不是它的实例调用方法

java - Eclipse 中的类型未定义该方法

R代码示例/最佳实践