Ruby division infinity/NaN应该返回0

Sum*_*not 6 ruby

我在Ruby On Rails上有一个应用程序.

在应用程序中,我想覆盖Ruby中的父类.

用于处理以下异常.

我到处搜索.我想在应用程序中覆盖ruby division方法.

因此,对于以下结果,它应该返回零.

0.0 / 0
 => NaN 

1.0 / 0
 => Infinity 
ZeroDivisionError: divided by 0
Run Code Online (Sandbox Code Playgroud)

我可以通过在分割操作时到处更改代码来处理它.但是我想通过覆盖方法本身来节省我的时间.

jBe*_*eas 5

您不需要特殊方法或扩展float类,因为其他答案状态.

Ruby为您提供了一个名为.finite的Float类的方法?

http://ruby-doc.org/core-1.9.3/Float.html#method-i-finite-3F

有限?→true或false如果flt是有效的IEEE浮点数(它不是无限的,并且nan?为假),则返回true.

if value.finite? == false
 value = 0
else
 value = value
end
Run Code Online (Sandbox Code Playgroud)

上面的例子有点冗长.


Abd*_*bdo 4

非常类似于:如何在 Ruby 中重新定义 Fixnum 的 +(加)方法并保留原始 + 功能?

class Float
  alias_method :old_div, :/

  def /(y)
    return NAN if self == y && y == 0.0
    return INFINITY if self == 1.0 && y == 0.0
    self.old_div(y)
  end
end
Run Code Online (Sandbox Code Playgroud)

我知道上面的代码可能不是您真正想要的。请随意按照您想要的方式定制它 =)

  • 这让我想哭。每次调用这段代码,上帝都会杀死一只小狗。 (3认同)
  • @Abdo 更大的问题是:这如何影响代码库工作的难度?当未来的程序员编写依赖于原始行为的代码时会发生什么?最好明确地挽救错误并保留“Float”类。您可能认为这样可以节省时间,但从长远来看,您会为此付出代价。 (3认同)