特定のマクロが何をしているのかに興味があり、(macroexpand-1)
より多くの情報を得るために電話をかけようとしました。ただし、ClojureScript の組み込みマクロ、特にcljs.core
名前空間のマクロを展開する方法について少し混乱しています。ドキュメントによると、ClojureScript マクロは Clojure で記述されているため、(ClojureScript REPL ではなく) Clojure REPL でテストする必要があります。
私のClojureScriptプロジェクトのディレクトリから実行lein repl
して、これを試しました:
=> (require 'cljs.compiler)
=> (require 'cljs.core)
=> (macroexpand-1 '(cljs.core/int 99.9))
(macroexpand-1 '(cljs.core/int 99.9))
(cljs.core/int 99.9)
なぜそれが返されるの(cljs.core/int 99.9)
ですか?ClojureScript sourceに基づいて、そのマクロは次のように展開されるべきではありません(bit-or ~x 0)
か?
などの ClojureScript 以外のマクロを展開すると(macroexpand-1 '(when (even? 2) (println "2 is even")))
、展開は正常に機能するようです。
概念的に何かが欠けているようです...