Ich habe einige Probleme zu verstehen, wie das delay
Makro in Clojure funktioniert. Es scheint nicht zu tun, was es erwartet (das heißt: Verzögerung der Evaluierung). Wie Sie in diesem Codebeispiel:Verzögerte Auswertung in Clojure
; returns the current time
(defn get-timestamp [] (System/currentTimeMillis))
; var should contain the current timestamp after calling "force"
(def current-time (delay (get-timestamp)))
jedoch current-time
Aufruf in der REPL den Ausdruck sofort auswerten erscheint, auch ohne das force
Makro genutzt haben:
user=> current-time
#<[email protected]: 1276376485859>
user=> (force current-time)
1276376485859
Warum war die Bewertung von get-timestamp
nicht verzögert bis zum ersten force
Anruf?
kleiner Kommentar: Es ist besser, direkt (System/currentTimeMillis) zu verwenden, anstatt ein Datum zu erstellen - sie verwenden die gleiche zugrunde liegende Millisekunde-Quelle, aber erstere vermeidet eine unnötige Objektzuordnung. – mikera