2024 年 Clojure 状态调查!中分享您的想法。

欢迎!请查看 关于 页面以获取更多关于如何操作的详细信息。

0
ClojureScript

以下代码在 Clojure 和 ClojureScript 中产生不同的结果

(defmacro beep [& args] (cons 'list args)) (print (beep 0 1 2 3))

在 Clojure 中,该代码输出 (0 1 2 3)
在 ClojureScript 中,该代码输出 (2 3)

2 答案

0
_评论由:mfikes_

Ethan,我认为这个工单无效。你是在 REPL 中定义宏的吗?如果是这样,你将看到宏只是由编译器调用的函数(带有两个额外的特殊参数 {{&env}} 和 {{&form}},你在示例代码中将它们作为 {{0}} 和 {{1}} 传递)。

ClojureScript 中的宏需要在一个单独的命名空间中定义,并使用 {{:require-macros}} 来使用。更多信息请参见 https://script.clojure.org/about/differences#_macros
0
参考: https://clojure.atlassian.net/browse/CLJS-2360(由 alex+import 报告)
...