問題タブ [clojure-java-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clojure - clojureでJava可変長引数を処理するには?
Java lib を clojure にラップしていますが、可変長引数の処理に問題があります。言う、
clojureでこの関数を呼び出すにはどうすればよいですか?
clojure - Clojure の制御フローの時間 - ScheduledThreadPoolExecutor の落とし穴?
Clojure の並行性について学んでいます。
http://dev.clojure.org/display/design/Scheduled+Eventsで、(Stuart Serra による?) 次のような主張に出くわしました。
- Clojure 関数は、ブロックまたは Java 相互運用なしでは制御フローに時間を使用できません
- Java 相互運用機能 (ScheduledThreadPoolExecutor) がスレッド ローカル バインディングを認識しない
私はこれらの主張を理解していません。おそらく例を挙げて、明確化をお願いします。具体的には:
- ScheduledThreadPoolExecutor の何が問題になっていますか? 私は新しい (緑の) スレッドを開始しているので、スレッドごとのバインディングが引き継がれるとは思っていません。
- 私は通常の Clojure 関数をスケジュールすることができます。
どうもありがとう!
java - Clojure deftype:フィールドタイプを制限する方法は?
ユーザーがClojureで書かれていることを知らなくても、Javaから使用できるClojureライブラリを作成しようとしています。このためには、フィールドに適切な型が必要です。
私はこれができるのが好きです:
x/y の適切な型を持つクラスを生成します。ただし、これはクラスではなく、プリミティブに対してのみ機能するようです。
以下を生成します。
私が期待する場所:
フィールドの種類を制限する方法はありますか? deftype
/以外に別のオプションはありますdefrecord
か?
java - Clojure で Java クラスをシーケンスとして機能させる
結果のシーケンスを表す Java クラスを使用しています (Clojure ベクトルのようなものです)。
このクラスを典型的な Clojure シーケンス関数で使用したい (つまり、シーケンスの抽象化をサポートしているかのようにクラスを動作させたい) のですが、クラスを変更できないため、実装することはできませんclojure.lang.Seqable
。また、厄介なことに、このクラスはjava.util.Collection
orを実装していませんjava.lang.Iterable
。
いくつかのオプションが表示されます:
iterator-seq
オブジェクトの (既存の) イテレータで使用します。java.util.Collection
/を実装する別のクラスでオブジェクトをラップするclojure.lang.Sequable
- オブジェクトを照会して Clojure ベクターまたはシーケンスを構築する関数を作成する
他のオプションはありますか?最善のアプローチは何ですか?
clojure - スレッド ファースト、スレッド ラスト、および「ドット」形式
これらの式の両方で同じ結果が得られるのはなぜですか?
> (macroexpand-all '(->> "string" (.charAt)))
(. "string" charAt)
> (macroexpand-all '(-> "string" (.charAt)))
(. "string" charAt)
「->>」マクロは「string」をリストの最後の要素として挿入するはずではありませんか?
java - Java と Leiningen の間に Clojure を挟む
クラスのために、JVM コードを書く必要があり、Clojure を使用したいと考えています。ソフトウェアスタックの下部で動作するようになりましたが、上部と下部にある GUI レイヤーの間で動作させることができません。私の主な問題は、Java GUI に Clojure ファイルを認識させることです。これには Leiningen を使用したいのですが、Java コンパイル ソリューションはこの相互運用性を考慮していないようです。ここでの答えは、まさに私が必要としているもののようです。コードなどをどこに置くべきかわかりません(詳細が十分ではありません)。誰にもヒントはありますか?
プラグインを作ってみたのですが、うまくいきません。私のケースが間違いなく問題の周辺にあることはわかっていますが、解決策があれば、教室での Clojure の使用がはるかに簡単になります。
ありがとう!
詳細:
コンパイル済みの Clojure jar を使用することはあまりうまくいきませんでした。(うーん) ステートフルな Clojure クラスを作成する必要があります (つまり、メソッドを静的にすることはできません)。私のクラス (src/final_project/MyLinkLayer.clj) のコードは次のようになります
私のproject.cljは
クラスは "target/classes/final_project/" にうまくコンパイル ("lein compile") されますが、メソッドは表示されません。jar を介してクラスをロードできます (パッケージのプロジェクト インポートの最上位の Java 部分で Maven を使用すると、十分に機能します)。Eclipse で .class ファイルをチェックしたところ、生成されたメソッドは Object からのものだけでした。何かご意見は?また、実際に Clojure クラスの「ステートフル」な部分に到達したら、何かアイデアはありますか? 前もって感謝します。
eclipse - JavaからClojureを呼び出すと、彼らは言った、それは簡単だろう、と彼らは言った
私は駆け出しの Clojure プログラマーであり、Eclipse で Java を真っ直ぐ使った経験があります。http://dev.clojure.org/display/doc/Getting+Started+with+Eclipse+and+Counterclockwiseの記事から作成された単純な「hello」関数を Java プログラムに呼び出させようとしています。hello 関数は、反時計回りのプラグインを介して起動された Clojure REPL から正常に機能します。Java クラスから hello 関数を実行しようとすると問題が発生します。
グーグルで調べてみると、これには基本的に 2 つの方法があることがわかります。clojure.lang.RT は Clojure ソースをロードしてスクリプトとして実行するか、Clojure ソースが JAR にコンパイルされたときに直接実行できます。
clojure.lang.RT バリアントは問題なく動作していますが、直接呼び出しバリアントを動作させる方法について完全に途方に暮れています。Java ファイルでは、コンパイラは「myproject.core」を解決できません。
Clojure のソースは core.clj で、次のとおりであり、REPL を通じてチャンピオンのように機能します。
ただし、Java ソースはコンパイルされません。
コンパイルエラーは...
Java から直接参照できるように、core.clj の .class 表現を classes ディレクトリに配置するように反時計回りのプロジェクトを構成するにはどうすればよいですか?
これは、完全な Maven などに移行しなくても可能でなければなりません。いいえ?
clojure - clojure/leiningen で Java クラスを要求する方法
Clojure/Java の相互運用性をテストしています。新しい Leiningen プロジェクトを作成し、使用するいくつかの依存関係を含むこの project.clj ファイルを作成しました。
「java-source-paths」リストも含めて、hello.java ファイルを次のような src/java ディレクトリに配置しました。
次に、テンプレートからこの core.clj ファイルを作成しました。
ご覧のとおり、アプリケーション関数で hello Java クラスを使用していません。必要としているだけですが、ターミナルで「lein jar」を実行すると、次のスタック トレースが表示されます。
どうすればいいですか?
clojure - Leiningen の独自の依存関係をどのように構成しますか?
私たちは、Clojure-Java の相互運用性を持つプロジェクトに取り組んでいます。この時点で、さまざまな依存関係を持つ 1 つのクラスがあり、それを開発用に Eclipse のユーザー ライブラリに入れましたが、もちろん Leiningen (2.x) を使用するときには役に立ちません。私たちの依存関係のほとんどは独自のものであるため、どこかのリポジトリにはありません。
これを行う最も簡単な/正しい方法は何ですか?
leiningenを見てきました- ローカル jar の依存関係を追加する方法は? 、しかしそれは時代遅れのようですか?
更新:そこで、これらの手順とgithub の lein 展開ドキュメントに従って、jar 用のローカル Maven リポジトリを作成し、project.clj ファイルを次のように編集しました。
maven_repository はプロジェクト ディレクトリの下にあります (したがって を使用しませんfile:///
)。「lein deps」を実行すると、次のメッセージが表示されました。
「サポートされているアルゴリズムが見つかりません」とは何を意味し、どのように修正すればよいですか?
Update2:ここで答えの最後のビットを見つけました。
java - Clojure からインスタンス メソッドを呼び出せません。
私は Java と clojure がまったく初めてです。しかし、以前に Common Lisp を使った経験があるので、clojure を試してみようと思いました。私はいくつかの非常に基本的なことを理解することができません。
これが実際の Java コードです。
このコードを実行すると、期待どおりの結果が得られます。
Clojureで私はこれを試しました:
ただし、このコードを実行すると、次の例外が発生します。
ここで何が間違っていますか?