7

コンパイル時に Javascript グローバル名前空間で Clojurescript 関数を定義する方法を探しています。コンパイル時とは、Clojurescript コンパイラに次のように出力させたいということですfunction some_fn() { }。これは慣用的なものではなく、すべてが名前空間に存在する必要があることはわかっていますが、私がいる環境では、これを行う必要があります。したがって、理想的には、そのようなもの(defn ^:global some-fn [])がどのように:export機能するかに似ていますが、名前空間は無視されます。

goog.global を使用してグローバル関数を定義するためのランタイム メソッドを認識しています (set! goog.global.someFunction some-clojure-fn)が、これは私の環境では機能しません。

4

2 に答える 2

8

おそらく、名前空間で定義してから、ウィンドウ(または環境に応じて GLOBAL またはこれ)オブジェクトで公開できます。

(defn foo [x] (* 2 x))
(aset js/window "foo" myns/foo)  ;; where myns is where foo is defined

fooその後、ウィンドウ (ブラウザーのグローバルな JavaScript 名前空間)から呼び出すことができるようになります。

更新: @ TerjeNorderhaug で提案されているように、次のようにグローバル名前空間に変数を設定できます。

(set! js/foo foo)
于 2013-03-06T22:51:58.667 に答える
2

JavaScript 変数を無名 Clojurescript 関数に設定すると、コンパイルされた関数が Javascript グローバル名前空間で定義されます。

(set! js/some_fn (fn []))

関数の呼び出しは期待どおりに機能します。

(js/some_fn)

于 2016-03-01T19:00:23.157 に答える