实例与类变量和随机数Ruby

时间:2015-01-12 23:18:30

标签: ruby variables random instance

你好我正在编写一个简单的(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

我想知道可能导致这种差异的原因是什么?

2 个答案:

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