Mal*_*rba 5 metadata clojure read-eval-print-loop
关于元数据的文档声称^{:hi 10} 'x等同于(with-meta 'x {:hi 10}),但我看不到。
评估以下内容,
(binding [*print-meta* true]
(prn ^{:hi 10} 'x)
(prn (with-meta 'x {:hi 10})))
Run Code Online (Sandbox Code Playgroud)
打印以下内容,这表明第一种情况没有附加元数据。
x
^{:hi 10} x
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
^是一个读取器宏,它将元数据附加到其后的表单。但是,'x它不是可以应用元数据的形式;它(quote x)通过'reader宏扩展为。键入时^{: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)
Run Code Online (Sandbox Code Playgroud)
但是,使用元数据评估表单不会将元数据传递到结果中:
user> (prn (eval (read-string "^{:hi 10} 'x")))
x
Run Code Online (Sandbox Code Playgroud)
您可以通过在^ 后面放置,将元数据附加到带引号的符号上',如下所示:
user> (prn (read-string "'^{:hi 10} x"))
(quote ^{:hi 10} x)
user> (prn '^{:hi 10} x)
^{:hi 10} x
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |