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

欢迎!有关如何使用本站的更多信息,请参阅关于页面。

0
ClojureScript
我在一个.cljc文件中定义了一个宏


(defmacro ->map
  "(->map a b) ;;=> {:a a :b b}"
  [& 符号]
  (assert (every? symbol? symbols))
  `(hash-map
    ~@(interleave (map keyword symbols) symbols)))


有时(但并非总是)会在浏览器日志中看到错误


router.cljc:203 未捕获错误:断言失败:(every? symbol? symbols)
    在 Function.dre.coll.__GT_map.cljs$core$IFn$_invoke$arity$variadic (coll.cljc:563)
    在 dre$coll$__GT_map (coll.cljc:560)
    在 events.cljs:64


为什么编译时宏最终在目标JS中以运行时函数的形式出现?非常令人惊讶。经过Slack上的讨论,发现这与自托管ClojureScript有关。Slack中的对话记录在附件slack.txt中。

https://github.com/cgrand/macrovich 为我找到了解决方案。

如果编译器在非自托管模式下不生成运行时函数,或者至少发出警告,那将很有帮助。

1 答案

0
相关链接:https://clojure.atlassian.net/browse/CLJS-2636(由borkdude报告)
...