gpt4 book ai didi

ruby - 为什么是楠?没有在 ruby​​ Fixnum 上实现?

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:50 24 4
gpt4 key购买 nike

我有一个使用 Fixnum 默认值的类。我想设置一个 guard 以确保永远不会使用 NaN 参数实例化该类。我惊愕地发现 Fixnum 不支持 nan?。我有一个解决方法。我只是想知道为什么。

class Table

attr_reader :rows, :min, :max, :increment
def initialize min = 0, max = 100, increment = 20
min = 0 if min.respond_to?(:nan?) && min.nan?
max = 100 if max.respond_to?(:nam?) && max.nan?
@min, @max, @increment, @rows = min.floor, max.ceil, increment, []
end
end

明确地说,这就是我所说的行为:

[8] pry(main)> 0.0.nan?
=> false
[9] pry(main)> BigDecimal.new(0).nan?
=> false
[10] pry(main)> 0.nan?
NoMethodError: undefined method `nan?' for 0:Fixnum
from (pry):10:in `__pry__'

例如,除以零后的行为。

[1] pry(main)> 0/0
ZeroDivisionError: divided by 0
from (pry):1:in `/'
[2] pry(main)> 0.0/0.0
=> NaN
[3] pry(main)> BigDecimal.new(0) / BigDecimal.new(0)
=> #<BigDecimal:1029faf80,'NaN',9(36)>
[4] pry(main)>

最佳答案

可能是因为整数是有限或确定的数,NaN 不适用于它。

来自 Wikipedia :

In computing, NaN, standing for not a number, is a numeric data type value representing an undefined or unrepresentable value, especially in floating-point calculations. Systematic use of NaNs was introduced by the IEEE 754 floating-point standard in 1985, along with the representation of other non-finite quantities like infinities.

进一步检查:

0.0.class
# => Float
0.class
# => Fixnum
0.class.superclass
# => Integer

关于ruby - 为什么是楠?没有在 ruby​​ Fixnum 上实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com