10

私は clojurescript で他の名前空間からマクロを正常にインポートしています。しかし、マクロを定義して使用できるように、単一ファイルの構築が clojure 1.7 で可能かどうか、または可能である必要があるかどうかは疑問です。私が試したことは機能しませんが、どこかで詳細を見逃している可能性があります。

(ns cljc.core)

#?(:cljs
(enable-console-print!))

#?(:clj
(defmacro list-macro [x y]
  `(list ~x ~y)))

(defn foo [a]
  (println (list-macro a a)))

(foo :a)

このフォームは、list-macrocljs のコンパイル時に未定義で失敗します。list-macro の :clj ガードを削除すると、defmacro は cljs コンパイル内で未定義になります。方法はありますか?

4

1 に答える 1

14

はい、単一のファイルを構築する方法があります。

(ns cljc.core
  #?(:cljs (:require-macros [cljc.core :refer [list-macro]])))

#?(:clj
(defmacro list-macro [x y]
;; ...

次の CLJS コンパイラ バージョンの 1 つでは、インポートが自動的に行われると想定されます。

于 2015-04-28T19:39:38.920 に答える