documentation on metadata声明^{:hi 10} 'x
等同于(with-meta 'x {:hi 10})
,但我无法看到。
在repl上评估以下内容,
(binding [*print-meta* true]
(prn ^{:hi 10} 'x)
(prn (with-meta 'x {:hi 10})))
打印以下内容,表明第一个案例没有附加元数据。
x
^{:hi 10} x
我做错了吗?
答案 0 :(得分:5)
^
是reader macro,它将元数据附加到其后的表单中。但是,'x
不是可以应用元数据的表单;它通过(quote x)
阅读器宏扩展为'
。当您输入^{:hi 10} 'x
时,元数据会附加到未评估的(quote x)
表单,而不会附加到空符号x
:
user> (set! *print-meta* true)
user> (prn (read-string "'x"))
(quote x)
user> (prn (read-string "^{:hi 10} 'x"))
^{:hi 10} (quote x)
但是,使用元数据评估表单不会将元数据传递给结果:
user> (prn (eval (read-string "^{:hi 10} 'x")))
x
您可以在<{1}} 之后放置^
,将元数据附加到带引号的符号,如下所示:
'