問題タブ [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.

0 投票する
1 に答える
877 参照

clojure - Java メソッドを引数として渡す

Java クラスがあるとします。

次のコードは Clojure では機能しません。

予想されるエラーを生成します(ここで質問はありません):

CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo in this context, compiling...:

しかし、シンボルを引用しようとすると

別のエラーが発生しますが、予想されるエラーも発生します。

IllegalArgumentException 一致するフィールドが見つかりません: クラス com.dullesopen.srl.FunCall のメソッド clojure.lang.Reflector.getInstanceField (Reflector.java:271)

特殊な形式のドキュメントによると、エラーが予想されます。(ドット) 2 番目の引数は、フィールドまたはメソッドの名前のいずれかに一致すると見なされるため、Clojure の観点からは実際のシンボルではありません。

以下のアプローチは問題を解決しますが、私は余分なものが好きではありませんmemfn。私にとっては、Java メソッドが実際には Clojure のファースト クラス オブジェクトではないことを示しています。

.問題は、メソッド名を取得するために 2 番目の引数を何らかの方法で解決/評価する必要があることを特別な形式に「示す」方法はありますか? それとも、ドットに似ているが、2 番目の引数が解決された別の特別なものがあるのでしょうか?

0 投票する
1 に答える
80 参照

clojure - clojure で RandomAccessFile の同じインスタンスを取得する

このコードはサーバー上で実行され、ファイルへの変更を検出してクライアントに送信します。これは初めて機能し、その後、ファイルを変更して保存してもファイルの長さが更新されません。ここでの理由は、clojureの不変性だと思います。どうすればこれを機能させることができますか?

0 投票する
2 に答える
497 参照

clojure - Clojure:複数の型ヒント?

変数に2つの型の可能性を指定する方法は?

ありがとう!

0 投票する
1 に答える
72 参照

clojure - Clojure に Java コードをインポートする - プロトコル バッファ

クラス Proto$Event.class (Protocol Buffer からコンパイル) を持つ JAR があります。Clojure プロジェクトで使用したいと考えています。

この手順に従って、Clojure プロジェクトに JAR を含めます。

しかし、このコードを clojure で実行することはできません:

エラー:

なにか提案を?

ありがとう

0 投票する
1 に答える
263 参照

java - この Clojure コードは、Java の代替コードに比べてなぜこんなに遅いのでしょうか?

tl;dr : 以下のコードが遅いのはなぜですか?

速度のために次のコードを最適化しようとしています。その目的は、n^2 操作を実行しながら、1 つの配列 (サイズ n=1000) を別の配列 (同じサイズ) に変換することです。変換の詳細は今のところ重要ではありません。

私は可能な限り速度を上げようとしているので、可能な限り Java プリミティブを使用しています。それでも、私が得たのは通常、1 回の「変換」呼び出しあたり約 70 ミリ秒です。Java に書き直すと、平均呼び出しにかかる時間は 2 ミリ秒未満です。

1) うわー、Java は速い

2) うわー、Clojure は遅い

3) どうしてそうなったのか説明してもらえますか? 単純に、Clojure が Java にかなり近いコード バイトコードを生成することを期待していますが、そうでないのはなぜでしょうか?

4) ^ints ヒントの使い方が 100% わからないのですが、間違っているのでしょうか?

0 投票する
1 に答える
287 参照

java - Clojure の gen-class で複数の Java メンバー変数を作成する方法

Clojure-Java 相互運用性に関する非常に古い質問に対するこの回答では、 andキーワードを使用gen-classして、Java からアクセス可能な単一のパブリック インスタンス変数を作成する方法について説明しています。Java クラスで使用できるデータが 1 つだけ必要な場合、または状態変数に格納されたマップなどを読み取るアクセサ関数を Java クラスで使用する必要がある場合は、これで十分です。このメソッドでは、状態変数に s を格納するなどして、データを変更することもできます。:state:initatom

Java クラスで直接読み取り可能な複数のインスタンス変数を作成したい場合はどうすればよいですか? これは可能ですか?たとえば、次のファイルをコンパイルしてBarクラスを実行すると、出力された値 42 を確認できますfoo.bar

Foo.clj:

Bar.java:

行のコメントbazを外すと、Bar.java はコンパイルされません。コンパイラはの状態変数としてbarまたはをランダムに作成するようです。いずれにせよ、関数を使用して両方を初期化する方法がわかりません。bazFooBarbarbazinit