Zuerst verhalten sie sich nicht gleich, versuchen, Lazy.force y
noch ein Mal zu tun, und Sie werden den Unterschied feststellen, die "World"
Nachricht wird nicht mehr gedruckt, so dass die Berechnung nicht wiederholt wird, da das Ergebnis in Erinnerung war im faulen Wert.
Dies ist der Hauptunterschied zwischen Lazy-Berechnungen und Thunks. Beide verzögern die Berechnung bis zu dem Zeitpunkt, zu dem sie gezwungen werden. Aber der Thunk wird seinen Körper jedes Mal auswerten, wenn der Lazy-Wert einmal ausgewertet wird und das Ergebnis der Berechnung protokolliert wird.
Unter der Haube ist der Lazy-Wert als Thunk-Objekt mit einem speziellen Flag implementiert. Wenn Runtime zuerst den Lazy-Wert aufruft, ersetzt sie den Körper des Thunk durch das Ergebnis der Berechnung. Nach dem ersten Aufruf an Lazy.force y
wurde das Objekt y
tatsächlich zu einer Ganzzahl 2
. Also die konsequenten Aufrufe an Lazy.force
nichts tun.