我在Ruby On Rails上有一个应用程序.
在应用程序中,我想覆盖Ruby中的父类.
用于处理以下异常.
我到处搜索.我想在应用程序中覆盖ruby division方法.
因此,对于以下结果,它应该返回零.
0.0 / 0
=> NaN
1.0 / 0
=> Infinity
ZeroDivisionError: divided by 0
Run Code Online (Sandbox Code Playgroud)
我可以通过在分割操作时到处更改代码来处理它.但是我想通过覆盖方法本身来节省我的时间.
您不需要特殊方法或扩展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)
上面的例子有点冗长.
非常类似于:如何在 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)
我知道上面的代码可能不是您真正想要的。请随意按照您想要的方式定制它 =)
| 归档时间: |
|
| 查看次数: |
2770 次 |
| 最近记录: |