問題タブ [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 の :state を理解できない
:state /dos/ の意味を理解しています。Java のように、クラスにフィールドを作成します。私が理解していないのは、これのポイントは何ですか?他のクラスを拡張する Clojure によって生成されたクラスでのみ行われているようです。http://www.fatvat.co.uk/2009/05/clojure-and-robocode.htmlは一例です。私は Java を知りませんし、オブジェクト指向プログラミングにもあまり詳しくありません。誰かが私に :state のポイントを説明できますか?それは Java 相互運用性とどこに適合しますか?
どうもありがとう!
注: :state と言うときは、(:gen-class :state) を指しています。
clojure - Clojure: 慣用的な Clojure のやり方で java.util.HashMap を操作する
java.util.HashMap
オブジェクト(Java コードの呼び出しからの戻り値)がm
あり、キーと値のペアを追加して新しいマップを取得したいと考えています。
Clojure マップの場合m
は、次を使用できます。
しかし、それを試してみると、次のようになりHashMap
ます。
java.lang.ClassCastException: java.util.HashMap は clojure.lang.Associative にキャストできません
どちらでも運が悪いseq
:
java.lang.ClassCastException: clojure.lang.IteratorSeq は clojure.lang.Associative にキャストできません
私がそれを行うことができた唯一の方法は、HashMap
の独自のものを使用することでしたput
が、それは返さvoid
れるため、明示的に返す必要がありますm
:
これは慣用的な Clojure コードではありませんm
。また、新しいマップを作成するのではなく、変更しています。
HashMap
より Clojure っぽい方法で aを操作するには?
java - Java から clojure を呼び出す
「Java から clojure を呼び出す」のトップ Google ヒットのほとんどは古くclojure.lang.RT
、ソース コードのコンパイルに使用することを推奨しています。Clojure プロジェクトから既に jar を作成し、それをクラスパスに含めていると仮定して、Java から Clojure を呼び出す方法の明確な説明を手伝っていただけますか?
java - JavaとClojureとLeiningen
leiningenを使用して、プロジェクトでClojureと一緒にネイティブJavaクラスを簡単に管理およびコンパイルすることは可能ですか?
私はかなり低いレベル(netty nioを使用)で作業しており、一部の配管クラスは、コードの構築とパフォーマンスの両方の観点から、実際には生のJavaとして処理する方が簡単だと考えています。
clojure - clojure -- 定義されたレコードで名前が衝突する?
動作に問題のあるコードがあります。レコードにMethodInfoという名前を付けると、 .toStringメソッドが正しくオーバーライドされなくなりました。
簡単なテストを実行すると、これがどのように失敗するかがわかります。
レコードの名前をAに変更すると、コードが正しく動作していることがわかります。
私は何を間違っていますか??
clojure - Clojure でクラスを定義する方法が 1 つではなく 5 つあるのはなぜですか?
Clojure には、gen-class、reify、proxy、さらに deftype と defrecord があり、新しいクラスのようなデータ型を定義します。構文の単純さを重視し、不必要な複雑さを嫌う言語にとって、それは異常のように思えます。誰かがなぜそうなのか説明できますか?Common Lisp スタイルの defclass で十分でしたか?
clojure - clojureでJava列挙型へのアクセスをパラメータ化するにはどうすればよいですか?
Java列挙型があるとします。例えば:
通常、その列挙型を使用して、次のように clojure で何かを実行できます。
しかし、呼び出し元が使用する列挙型インスタンスを指定できるようにする clojure 関数を書きたいと思います。
アイデアは、呼び出し元が渡され"DIAMONDS"
、DIAMONDS
列挙型インスタンスが にバインドされるようs
にすることlet
です。
パラメータと一致する可能性がありcond
ますが、必要以上に扱いにくいようです。マクロを使用して、Suits/
追加を構築することもできると思いますsuit
。これはそれを行う方法ですか、それとも私が見逃しているマクロ以外の方法はありますか?
functional-programming - Clojure の怠惰性は、Java/インピュア コードの呼び出しとどのように相互作用しますか?
今日、私たちのコードで問題に遭遇し、この Clojure の質問に答えることができませんでした:
Clojure は不純なコード (または Java コードの呼び出し) を厳密に評価しますか、それとも遅延して評価しますか?
副作用 + 遅延シーケンスにより、奇妙な動作が発生する可能性があるようです。
質問につながったことがわかっていることは次のとおりです。
Clojure には遅延シーケンスがあります。
また、Clojure には副作用と不純な機能があります。
また、Clojure は Java オブジェクトを呼び出すことができますが、これには副作用が含まれる場合があります。ただし、副作用は遅延評価とうまく相互作用しない可能性があります。
そのため、最初の 5 つの要素が返されましたが、最初の 31 が出力されました!
Java オブジェクトに対して副作用のあるメソッドを呼び出すと、同様の問題が発生する可能性があると思います。これにより、コードについて推論し、何が起こるかを理解することが非常に難しくなる可能性があります。
補助的な質問:
- そのような状況に気をつけて防ぐのはプログラマ次第ですか? (はい?)
- シーケンス以外に、Clojure は厳密な評価を実行しますか? (はい?)
java - Java オブジェクトを Clojure マップとして使用する
Clojure で使用したい Java クラスがあります。でも、Clojureマップとして使いたい。そのために必要な手順は何ですか?
コードを見てきましたIPersistentMap
-- Java クラスはそれを実装する必要がありますか? それとも、プロトコルを実装する Clojure コードが必要ですか?
コードをJavaオブジェクトからマップに明示的に変換するために、いくつかのマッピングコードを書くことができることはわかっていますが、そのソリューションは労力/報酬の比率が高くなります。また、同じ状況に何度も遭遇する可能性があります。
具体例: Java で書かれたパーサーがあります。それを使用してテキストを解析し、Clojure マップにあるかのように、解析されたデータ構造の内容にアクセスしたいと思います。