有时候,你可能需要防止一个表达式或者部分表达式被执行。这种就需要一种称为“代码保护”的技术。这项技术使用起来非常简单,就是在表达式前面加上一个单引号“ ‘ ”。clojure 遇到这种前缀加上单引号的表达式就会直接跳过求值,直接把其当做一种叫做“符号”的数据结构。
=>(+ 4 5 3)
12
=>'(+ 4 5 3)
(+ 4 5 3)
=>(str '(+ 4 5 3) " is protected while " (+ 4 5 3) " is evaluated.")
"(+ 4 5 3) is protected while 12 is evaluated."
关于符号:
这里的单引号实际上是另一种形式,叫做quote。'(1 2 3)和(quoto (1 2 3))只是表示相同事物的不同方法而已。quote(或者单引号)可以在任何地方使用,来阻止Clojure立即对一个表达式求值。实际上,它的作用远不 止于声明一个列表,当涉及到元编程的时候,单引号十分必须。这个后面在对符号作用进行详细说明。