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