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 提交)
...