Clojure 中的语法引用和 Clojurescript 中的语法引用有什么区别?

问题描述 投票:0回答:1

在 Clojure REPL 中:

(macroexpand-1 `(sum 2 1)) ; (user/sum 2 1)

在 Clojurescript REPL 中:

(macroexpand-1 `(sum 2 1)) ; AssertionError: Assert failed: Argument to macroexpand-1 must be quoted

为什么会发生这种情况?您能解释一下 Clojurescript 中的评估过程吗?

clojure macros clojurescript read-eval-print-loop
1个回答
0
投票

在 Clojure 中,

macroexpand-1
可以是一个函数,因为 Clojure 可以在运行时访问编译器,因此
macroexpand-1
可以检查您构造的任何列表。 Clojurescript 被编译为 Javascript,并且在运行时无法访问编译器。所以 Macroexpand 仅在编译时有用,并且必须是宏才能运行。因此,它不会评估其参数,并且需要它是一个字面引用列表。

© www.soinside.com 2019 - 2024. All rights reserved.