문제

다음 코드가 주어지면 :

let bar =
    lazy(
        printfn "bar"        
        ())

let foo = 
    lazy(
        printfn "foo"
        bar)

대화식 창 (매번 재설정)에서

내가 전화 할 때 let res = foo.Force () 나는 얻다:

foo
val res : Lazy<unit> = Value is not created.

내가 전화 할 때 foo.Force() , 나는 얻다:

foo
bar
val it : Lazy<unit> =
  <ToString exception: Object reference not set to an instance of an object.>
    {IsValueCreated = false;
     Value = null;}

두 경우 모두 "foo"만 인쇄 할 것으로 예상했지만 두 번째 경우는 "foo nbar"를 인쇄합니다. 여기서 무슨 일이야?

도움이 되었습니까?

해결책

F#의 어떤 버전이 있습니까? 이것은 아마도 고정 된 버그처럼 들릴 것입니다. FSI가 Lazy 유형 < 'a>의 값을 인쇄 할 때, 어느 시점에서 나는 ToString ()이 Lazy에게 인쇄하는 데 사용되는 값을 표시하는 반면, 그렇지 않습니다.

다른 팁

문제는 구현 세부 사항 인 것 같습니다. 게으른 참조는 언제 값을 계산했는지 어떻게 알 수 있습니까? 아마도 참조가 아닌 경우 ().

유형이 있습니다 Lazy<unit> 그다지 의미가 없습니다. 노력하다

let bar =
    lazy(
        printfn "bar"        
        42)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top