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