私はX.clojurescriptとX.clojure名前空間を持っているとしましょう。 X.clojurescriptのすべてがClojurescriptコードであり、X.clojureのすべてがClojureコードです。残念ながら、私はClojureの中でそれらを定義し、これは大丈夫ですClojurescriptマクロから必要なClojurescriptコードを扱うにはどうすればよいですか?
(ns X.clojurescript.abc
(:require-macros [X.clojure.def :as clj]))
を使用してClojurescript名前空間にそれらを持参する必要があり、Clojurescriptに直接マクロを定義することはできません。しかし、マクロ(X.clojureで定義されている)がClojurescript名前空間(X.clojurescript)で定義されたものを参照する必要がある場合はどうでしょうか?問題は、他の名前空間を解決するときに、ClojureコンパイラがClojurescript名前空間(別のディレクトリ)を見ないということです。
私はClojurescriptに存在するのと同じ名前空間と必要な定義を持つClojureコードに名前空間を作成するだけでこの問題を回避しましたが、これは馬鹿げたようです。たとえば、マクロにX.clojurescript.abc.yが必要な場合は、ClojureバージョンのX.clojurescript.abcでダミーyを定義する追加の名前空間をClojure側に作成します。一種のダム。
Clojurescript側で何かを参照する必要があるマクロはどうやって処理しますか?
パラメータとしてclojurescriptから必要なものをすべて取るようにマクロを作成します。いくつかのコードを追加することができれば、あなたの明確な質問にもっと簡単に答えることができます – Ankur
私はあなたの質問を理解するとは思わない。あなたのマクロは、* clojurescriptで評価されるコードを生成する*必要があります。だから、もしあなたがclourescript defを参照しなければならないのであれば、マクロの展開でシンボルを生成するのに十分ではありませんか? – KIMA
'Clojurescript側の何かを参照する'あなたはマクロ展開時にこれを必要とするか、これは出力コードで出力されるものでしょうか? – Ankur