当我偶然发现一些非常有趣的东西时,我正在测试我的一些 Ruby 1.9 代码。我希望有人能解释为什么会这样。
这是代码:
inf = Float::INFINITY
x = inf - inf
y = 0.0/0.0
puts "X is #{x}"
puts "Y is #{y}"
puts "X and Y are both NaN." if x.nan? && y.nan?
puts "This is all as we expected, but here is the mystery..."
puts "X is not equal to Y." if x == y
puts "Surprisingly not even X is equal to X." if x == x
这是输出:
X is NaN
Y is NaN
X and Y are both NaN.
This is all as we expected, but here is the mystery...
我以两种不同的方式为两个变量分配了一个 NaN 值,当我测试它们是否相等时,情况并非如此。在那之后,我测试了一个变量是否等于它自己,即使那不是真的。期望某个值等于自身是合乎逻辑的,但正如我们可以看到的那样,事实并非如此。
我不知道这是否是测试 NaN 值的正确方法,但我真的很想知道这一切的背后是什么,Ruby 有这样的行为吗?
谢谢