我正在尝试在我的代码中找到生成NaN的位置,并且我认为,为此目的,更改Ruby的一般行为以在a时引发异常将非常有帮助否则将生成NaN。例如,尝试0.0 / 0.0而不是返回NaN时引发异常。
似乎没有可能,但也许有人知道如何做到这一点。编辑:我收回它,下面的猴子补丁解决方案似乎工作。
答案 0 :(得分:4)
你可以使用细化来修补补丁Float#/
(请记住,Ruby中的大多数操作符都只是方法)
module RaiseExceptionOnNaN
refine Float do
def /(*)
super.tap {|result| raise ZeroDivisionError if result.nan?}
end
end
end
然后在您的模块/类中,使用模块
class MyClass
using RaiseExceptionOnNaN
# Have a try
0.0 / 0.0
end