問題タブ [gen-class]
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.
macros - gen-classを使用するclojureマクロはアノテーションを作成しません
コンパイル時に複数のJavaクラスを生成するために使用されるclojureマクロを作成しようとしています。マクロの外部でgen-classを呼び出すと、クラスにアノテーションを追加できることがわかりました。ただし、マクロ内でgen-classを使用しようとすると、コンパイルされたクラスにアノテーションがありません。
私は自分の問題をこの例に要約しました:
このファイルをコンパイルすると、Test1.classとTest2.classが作成されます。Eclipseで両方を調べたところ、Test1にはクラスレベルとメソッドレベルの両方の@Deprecatedアノテーションがありますが、Test2.classにはアノテーションがありません。macroexpandを使用すると、Test2.classに注釈を付ける必要があるように見えます。
私はここで何が間違っているのですか?
clojure - メソッドのリストを gen-class に渡すにはどうすればよいですか?
これを使用すると、正常にgen-class
コンパイルされます。
しかし、これを行うと:
次のエラーが表示されます。
CompilerException java.lang.RuntimeException: Unable to resolve symbol: hello in this context, compiling:(clj\sandbox.clj:3:17)
このエラーを回避する方法はありますか? :methods
インラインで定義するのではなく 、値を渡すことができるようにしたいと思います。
重要な場合、これは私がこれを生成するために使用している pom.xml です:
static - clojure の gen-class マクロを使用して静的フィールドを持つクラスを生成することは可能ですか?
次のクラスは、Clojure の gen-class マクロを使用して生成できますか?
そうでない場合、なぜですか?
java - Clojure -- deftype を使用して公開可変メンバーを定義する方法は?
http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htmを clojure で実行しようとしています。
@FXML
Javaバージョンの注釈を省略して公開することで、次のことを発見しました。
に:
...ボタンをクリックしても基本的に機能し、fxml はコントローラーのpublic Text actiontarget
にアクセスできます。コントローラーのアクセスは通常、@FXML
注釈を介してのみ有効になります。
そのため、clojure ベースのコントローラー クラスにパブリックな可変フィールドを持たせようとしていますが、最後の数時間、:gen-class と deftypes を調べても、それを機能させる方法が見つかりません。Java テスト コードから (デフォルトの) deftype フィールドにアクセスできましfinal
たが、私が見た唯一のオンライン ディスカッションでは、public および mutable フィールドを持つことはできず、:gen-class. まあ、gen-class でもそれを見つけることはできません。私が見つけたすべての gen-class の例では、clojure 内からのみクラス フィールドを使用しています。java からアクセスできるように :gen-class で :state を定義する方法がわかりません。また、それらを変更可能にして公開する方法もわかりません。
私の次のことは、clojure アノテーションを試してから、fx:controller ではなく fx:script フィールドを使用して clojure コールバックを定義することです...しかし、最初に deftype または gen-class で実行可能/実行不可であることを確認したいと思います。
クロージュアで公開可変フィールドを持つJavaアクセス可能なクラスを作成することが可能かどうか誰か教えてもらえますか?
ありがとう。
clojure - Clojure はプリミティブ操作を効率的にインライン化しますか?
次の Clojure コードがあるとします。
gen-class は、次の Java コードをコンパイルするのと同等のバイト コードを生成します。
言い換えれば、Clojure を非常に便利な DSL として使用して、効率的な動的バイト コードを生成することはできますか?
編集:
わかりました、私の問題を説明するためにいくつかのテストを行いました:
Javaバージョンは次のとおりです。
これにより、次の出力が生成されます。所要時間: 39200
Clojure の「同等」:
それは生成します:「経過時間:121242.902ミリ秒」
これは3倍遅いです。
今、私の言い換えた質問は次のとおりです。事実上原始的な数学演算であるコード内の関数呼び出しを回避するために、どうすれば clojure コードを構造化/ヒント化できますか?
編集2:
テストを変更して、チェックされていないプリミティブ数学演算子を使用するようにしました。
「経過時間: 64386.187 ミリ秒」なので、ほぼ 2 倍優れていますが、それでも Java バージョンの 1.6 倍です。
clojure - clojure gen-classで生成されたクラスの呼び出しの問題
次の MyCache.clj を定義しました
(compile 'abcd.MyCache) を使用して上記のファイルを正常にコンパイルしました。
以下に示すように、生成されたクラスを使用しようとすると、エラーが発生します。助けてください。
clojure - gen-class を使用した Clojure 複数のコンストラクター
clojureでgen-classを使用して複数のコンストラクタと状態を定義するにはどうすればよいですか? :init、:state、:constructors の単一値マッピングでこれを行う方法がわかりません。
serialization - Clojure: ロード時や実行時ではなく、コンパイル時に Java オブジェクトを作成する方法
Clojure で Java ライブラリを使用しています。Java ライブラリでは、コンパイル時にのみオブジェクトを作成する必要があります。アプリが uberjar (leiningen で作成) を介してデプロイされる場合、この構成オブジェクトはエラーなしで適切に作成できません。
マクロを使用して、コンパイル時のみにオブジェクトを作成できます。問題は、シリアライズできないことです。アプリがuberjar経由で実行されているときに、このオブジェクトをjvmで使用できるようにするにはどうすればよいですか? アトムは、jar を実行している新しい jvm インスタンスのロード時または実行時にリセットされるため、オブジェクトをアトムに配置しても機能しません。コンパイル時の jvm には、このオブジェクトを aot コンパイル済みクラスの 1 つに配置する方法が必要です。(gen-class) は、初期化子を介して実行時にしか状態を初期化できないため、機能していないようです。