Ich habe einige Schwierigkeiten zu verstehen, wie die delay
Makro funktioniert in Clojure. Es scheint nicht das zu tun, was man von ihm erwartet (nämlich: die Auswertung zu verzögern). Wie Sie in diesem Codebeispiel sehen können:
; returns the current time
(defn get-timestamp [] (System/currentTimeMillis))
; var should contain the current timestamp after calling "force"
(def current-time (delay (get-timestamp)))
Allerdings ist der Aufruf current-time
in der REPL scheint den Ausdruck sofort auszuwerten, auch ohne die Verwendung der force
Makro:
user=> current-time
#<Delay@19b5217: 1276376485859>
user=> (force current-time)
1276376485859
Warum wurde die Bewertung von get-timestamp
nicht bis zum ersten Termin der force
anrufen?
1 Stimmen
Kleinere Anmerkung: es ist besser, (System/currentTimeMillis) direkt zu verwenden, anstatt ein Datum zu konstruieren - sie verwenden die gleiche zugrunde liegende Millisekundenquelle, aber die erste vermeidet eine unnötige Objektzuweisung.