問題タブ [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 - 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 番目の引数が解決された別の特別なものがあるのでしょうか?
clojure - clojure で RandomAccessFile の同じインスタンスを取得する
このコードはサーバー上で実行され、ファイルへの変更を検出してクライアントに送信します。これは初めて機能し、その後、ファイルを変更して保存してもファイルの長さが更新されません。ここでの理由は、clojureの不変性だと思います。どうすればこれを機能させることができますか?
clojure - Clojure:複数の型ヒント?
変数に2つの型の可能性を指定する方法は?
ありがとう!
clojure - Clojure に Java コードをインポートする - プロトコル バッファ
クラス Proto$Event.class (Protocol Buffer からコンパイル) を持つ JAR があります。Clojure プロジェクトで使用したいと考えています。
この手順に従って、Clojure プロジェクトに JAR を含めます。
しかし、このコードを clojure で実行することはできません:
エラー:
なにか提案を?
ありがとう
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% わからないのですが、間違っているのでしょうか?
java - Clojure の gen-class で複数の Java メンバー変数を作成する方法
Clojure-Java 相互運用性に関する非常に古い質問に対するこの回答では、 andキーワードを使用gen-class
して、Java からアクセス可能な単一のパブリック インスタンス変数を作成する方法について説明しています。Java クラスで使用できるデータが 1 つだけ必要な場合、または状態変数に格納されたマップなどを読み取るアクセサ関数を Java クラスで使用する必要がある場合は、これで十分です。このメソッドでは、状態変数に s を格納するなどして、データを変更することもできます。:state
:init
atom
Java クラスで直接読み取り可能な複数のインスタンス変数を作成したい場合はどうすればよいですか? これは可能ですか?たとえば、次のファイルをコンパイルしてBar
クラスを実行すると、出力された値 42 を確認できますfoo.bar
。
Foo.clj:
Bar.java:
行のコメントbaz
を外すと、Bar.java はコンパイルされません。コンパイラはの状態変数としてbar
またはをランダムに作成するようです。いずれにせよ、関数を使用して両方を初期化する方法がわかりません。baz
Foo
Bar
bar
baz
init