Ruby 扩展方法是否不是;红宝石之路;?

Ruby 扩展方法是否不是;红宝石之路;?,ruby,methods,coding-style,refactoring,extension-methods,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 在我看来,第二种方法比第二种方法更难理解(是可除的吗?(i,5))和是可除的吗?5。甚至,i

在使用C#时,我发现创建扩展方法非常方便。在Ruby中,您可能会看到:

class Fixnum
  is_divisible? divisor
    self % divisor == 0
  end
end
但我没有看到人们以这种方式扩展内置类型

不延长的方式是:

def is_divisible? dividend, divisor
  dividend % divisor == 0
end
在我看来,第二种方法比第二种方法更难理解(
是可除的吗?(i,5)
)和
是可除的吗?5
。甚至,
i.u可被除吗?5


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

虽然这是一个有点琐碎的例子,但猴子补丁通常是不错的。在类命名空间中有方法比在无处漂浮的方法更好。

只要记住,如果你正在写一个宝石或者你想让其他人使用的东西,你的猴子补丁有可能会干扰他们的猴子补丁


对于这样一个简单的例子,为了安全起见,最好避免使用它。

是可分割的吗?
这是你实际要写的东西,还是仅仅是一个例子?我无法想象在一个方法中包装一个模运算……这是我要写的东西。@EdS。包装它是因为它是声明性的。这是一个完全不同的抽象思维层次?b大于
b%a==0
。另外,我真的很喜欢
#zero?
方法,希望也有一个
#one?
方法。@Joshuache:好的,我看不出这有什么用处。也许只有我,但我不需要我的代码像英语一样阅读。老实说,我只是不明白为什么有人会觉得有必要把像I==0这样的语句抽象出来,因为我的大脑处理它们的方式不同。