为什么在函数中使用Random会导致重复?

时间:2014-11-20 17:12:40

标签: scala random

下面是一些非常基本的示例代码来说明问题。

case class randomizer(seed: Long){
  def getRandom(): Double = {
    //Other stuff
    val rand = new util.Random(seed)
    rand.nextDouble()
  }
}

这将始终可靠地返回相同的第一个值。每次调用getRandom时都会。

然而,

case class randomizer(seed: Long){
  val rand = new util.Random(seed)

  def getRandom(): Double = {
    //Other stuff

    rand.nextDouble()
  }
}

每次都会返回一个不同的随机值。

我怀疑这是因为通过每次重新初始化rand(如第一次),我们最终获得该种子的第一个数字。由于种子保证每次这是预期的行为,我们将获得相同的“随机数”集。通过将生成器移动到函数之外,只要类完成,它就会存在,结果继续在“set”中生成数字。这是考虑这个问题的正确方法吗?

1 个答案:

答案 0 :(得分:0)

它不是" set"这是一个" stream",但是,那就是它。