4

在 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.

有没有更雄辩的 Ruby 风格的方式来做这种事情?还是第一种方法是首选方法?

4

1 回答 1

4

虽然这是一个微不足道的例子,但猴子补丁通常很好。最好将方法放在类的命名空间中,而不是在茫茫荒野中四处游荡。

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

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

于 2012-09-07T03:16:33.543 回答