(delay & body)
参数 body 接受一系列表达式,并返回一个 Delay 对象。
这个 Delay 对象只有在第一次被 force 函数、 deref 函数或者 @ 宏强迫求值时,才会对 body 进行求值。
body 的求值结果会被缓存,之后对这个 Delay 对象的所有强迫求值,都返回这个缓存结果。
user=> (def d (delay (println "force delay object")
                     (+ 1 1)))
#'user/d
user=> d
#<Delay@15c5bba: :pending>
user=> @d
force delay object      ; 第一次强迫求值
2                       ; 这个值会被缓存
user=> @d
2                       ; 不再求值 body ,只返回缓存值
user=> d
#<Delay@15c5bba: 2>     ; 打印值现在带有 body 的值