में विलंबित मूल्यांकन मुझे कुछ परेशानी हो रही है कि क्लोजर में delay
मैक्रो कैसे काम करता है। ऐसा लगता है कि ऐसा करने की उम्मीद नहीं है (यानी: मूल्यांकन में देरी)। आप इस कोड नमूने में देख सकते हैं:क्लोजर
; returns the current time
(defn get-timestamp [] (System/currentTimeMillis))
; var should contain the current timestamp after calling "force"
(def current-time (delay (get-timestamp)))
हालांकि
, current-time
बुला में आरईपीएल तुरंत, अभिव्यक्ति का मूल्यांकन करने के भी force
मैक्रो का उपयोग कर लेने के बिना प्रकट होता है:
user=> current-time
#<[email protected]: 1276376485859>
user=> (force current-time)
1276376485859
क्यों था के मूल्यांकन get-timestamp
पहले force
कॉल तक देरी नहीं हुई?
मामूली टिप्पणी: किसी तारीख को बनाने के बजाय सीधे (सिस्टम/वर्तमान टाइममिलिस) का उपयोग करना बेहतर होता है - वे समान अंतर्निहित मिलीसेकंड स्रोत का उपयोग करते हैं लेकिन पूर्व अनावश्यक ऑब्जेक्ट आवंटन से बचाता है। – mikera