你好我正在编写一个简单的(n)面模具的代码,它工作正常:
class Die
def initialize(sides)
@sides = sides
raise ArgumentError if sides < 1
end
def roll
roll_number = rand(@sides) + 1
end
end
然而,当我将初始化变量从实例更改为类时,生成的随机数从整数变为1左右的一堆小浮点数。
class Die
def initialize(sides)
HERE --> @@sides = sides
raise ArgumentError if sides < 1
end
def roll
roll_number = rand(@sides) + 1
end
end
我想知道可能导致这种差异的原因是什么?
答案 0 :(得分:1)
在第二个代码段中,您正在初始化类变量@@sides
,但仍将实例变量@sides
传递给rand()
。由于@sides
未初始化,因此您将nil
传递给rand()
,因此Kernel#rand会提供浮点数而不是整数。
答案 1 :(得分:0)
您的代码中存在错误,在Die
的第二版中,您实际上从未在roll
方法中调用正确的变量。
应该是:
def roll
roll_number = rand(@@sides) + 1
end
相反,你的评估是:
roll_number = rand(nil) + 1
根据rand
库,如果你不提供参数,rand会返回一个介于0.0和1.0之间的伪随机浮点数,包括0.0和1.0。