我了解backtick(`)和apostrophe(')都可以阻止符号或表达式的求值。但是,在宏定义中使用反引号,而在符号(等等其他内容)中使用撇号。从语义上讲,这两种表示法有什么区别呢?
反引号允许将动态部分插入引用表达式中,如,foo
和,@foo
。
'
直接按字面意思引用所有内容。
如果表达式中没有逗号部分,则可以交替使用 `
和 '
。
标准的引用是一个真正的常量字面量,类似的列表和以相同结构结尾的列表可以共享值:
'(a b c d) ; ==> (a b c d)
`(a ,@b ,c d)
这样的东西实际上会被扩展成类似于(cons 'a (append b (cons c '(d))))
的东西。'(d)
有潜力被共享,并且如果使用结果的突变连接可能会得到无限结构。"Hello $var"; // ==> 'Hello Shoblade'
'Hello $var'; // ==> 'Hello $var'