如何引发异常而不是返回NaN

时间:2017-03-09 01:02:07

标签: ruby nan

我正在尝试在我的代码中找到生成NaN的位置,并且我认为,为此目的,更改Ruby的一般行为以在a时引发异常将非常有帮助否则将生成NaN。例如,尝试0.0 / 0.0而不是返回NaN时引发异常。

似乎没有可能,但也许有人知道如何做到这一点。编辑:我收回它,下面的猴子补丁解决方案似乎工作。

1 个答案:

答案 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