-1
다음은이 질문을 설명하기위한 몇 가지 기본적인 샘플 코드입니다.함수에서 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"에 숫자가 계속 생성됩니다. 이것이 올바른 생각입니까?
<주간 "루프 안에 RNG를 시드하지 마십시오"대답을 –
@LeeDanielCrocker 고마워요. 정직한 질문에 대한 회신으로 귀하의 쓴 소동에 진심으로 감사드립니다. – user3789100
잘 문서화되고 쉽게 검색 할 수 있음에도 불구하고 일주일에 한 번 정도입니다. 매주 "당신은 ++ 같은 것을 사용할 수 없습니다"와 "char 리터럴은 불변"이라는 질문과 함께. 30 년 후에도 냉소적 인 반응을 보일 것입니다. –