Metadata
- 来源: Emacs 25 内置
- Summary: Lazy form evaluation
About
Elisp 函数调用时,参数都会被先计算出来,但如果某些参数用不上的话,相应的计算也就浪费了。比如 (* 0 (factorial 100))
,用不着计算 100!
也能知道结果是 0
。这种情况可以用 lazy evaluation,来保证:
- 如果用不得上,不计算
100!
(按需计算) - 否则,计算一次(且仅一次)
100!
(避免重复计算)
Example
;; 没打印 hi,说明没有计算 (message ...
(my-mult 0 (thunk-delay (message "hi") (line-number-at-pos)))
=> 0
;; 仅仅打印一次 hi,说明计算了一次 (message ...
(my-mult 10 (thunk-delay (message "hi") (line-number-at-pos)))
|- hi
=> 320