2014-11-20 5 views
-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"에 숫자가 계속 생성됩니다. 이것이 올바른 생각입니까?

+3

<주간 "루프 안에 RNG를 시드하지 마십시오"대답을 –

+0

@LeeDanielCrocker 고마워요. 정직한 질문에 대한 회신으로 귀하의 쓴 소동에 진심으로 감사드립니다. – user3789100

+0

잘 문서화되고 쉽게 검색 할 수 있음에도 불구하고 일주일에 한 번 정도입니다. 매주 "당신은 ++ 같은 것을 사용할 수 없습니다"와 "char 리터럴은 불변"이라는 질문과 함께. 30 년 후에도 냉소적 인 반응을 보일 것입니다. –

답변

0

'스트림'만큼이나 '설정'되지는 않지만 그렇습니다.

관련 문제