简而言之,有什么区别?
(setq var1 `(,(get-internal-real-time)))
var1
-->(1358995178904535)
var1
-->(1358995178904535)
(setq var2 '(#.(get-internal-real-time)))
var2
-->(1358995195568422)
var2
-->(1358995195568422)
我认为也许“读取时评估”意味着它会在我每次读取变量时进行评估,但我想我错了,quasiquote eval 也不会这样做。
最佳答案
差异很重要的示例:
* (defun foo () `(,(get-internal-real-time)))
FOO
* (defun bar () '(#.(get-internal-real-time)))
BAR
* (foo)
(44577)
* (foo)
(47651)
* (bar)
(41929)
* (bar)
(41929)
如您所见,当您不直接使用该值时(如在 (setq var1 ...)
情况下),每次都会扩展准引号,返回不同的值.然而,对于读取时评估,它只被调用一次,一次又一次地返回相同的值。
关于lisp - 读取时评估宏与准引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14493175/