2012-08-13 11 views
13

スカラーがバイトコードにコンパイルされるときに、scalaクラス/オブジェクトをclojureから呼び出すことができることはよく知られており、clojureはそれに慣れています。clojureとscala interop

しかし、それは痛みのない呼び出しのclojure関数として、そしてscalaから名前空間をインポートしているのでしょうか?

私は優れたエレベーターフレームワークとクロージャーを混在させたいと思います。基本的にエレベーターからクロージャーコードを呼び出します。

+0

私は、JRuby-ClojureとJRuby-Scalaのために人々が橋を書いていることを知っています。誰かがClojure-Scalaをやっていないのであれば、私は非常に驚いています。 –

答えて

12

Scalaでのインポートのセマンティクスは、基本的にJavaと同じです。 JavaからClojureコードを呼び出す方法を読んで、必要な情報を得ることができます。そして、Scalaで同じ原則を適用してください。

あなたはClojureのコードをコンパイルすると、あなたのクラスパスにJARとしてそれを含める場合、このポストは、関連する必要があります:

Calling Clojure from Java

あなたではなく、動的に解釈/ .cljファイルをコンパイルしたい場合は、最初のオプションは私にたくさんよりよいようだ

Clojure Programming: Invoking Clojure from Java

:あなたはこれを読む必要があります。

+2

+1、私は第二の選択肢は本当に考慮する価値があると思う。よりダイナミックな選択肢です。これはClojureを一種の組み込みスクリプト言語として使用する場合に便利です。また、Clojureクラスをあらかじめコンパイルする必要がなくなります。 – mikera

+0

スカラーに 'var'を使うことには少し問題があります。バックルを置く必要があります。私はしばらく前にinteropを必要とし、このラッパーを作った:https://gist.github.com/HairyFotr/4995607 – HairyFotr

0

FWIW、私は最近同様の経験がありました。 clojureコードベースでスカラーライブラリを使うのは必ずしも簡単ではありません。ライブラリの作者がAPIを設計する際にスケーラのない消費者を念頭に置いていれば、統合は簡単なことです。そうでない場合は、あなたが使用しようとしているスカラライブラリによって生成されたJavaインターフェイスの詳細を知る必要があります。

私は最近、この正確なトピック(https://github.com/grandbora/clojure-scala-cantrips#clojure-scala-cantrips)についてのドキュメントを書きました。スケーラライブラリを消費するための糖構文を提供するいくつかのclojureライブラリがあります。