Clojure gen-classにメタデータを添付することは可能ですか?Clojure gen-classにメタデータを添付する
クラスにJavaアノテーションを追加する必要があるライブラリを使用するサーバーを実装しようとしています。
今後の書籍「Programming Clojure」(9.7.3節)から、gen-classメソッドに注釈を追加するのは簡単ですが、クラスレベルの注釈を追加することは言及されていません。
Clojure gen-classにメタデータを添付することは可能ですか?Clojure gen-classにメタデータを添付する
クラスにJavaアノテーションを追加する必要があるライブラリを使用するサーバーを実装しようとしています。
今後の書籍「Programming Clojure」(9.7.3節)から、gen-classメソッドに注釈を追加するのは簡単ですが、クラスレベルの注釈を追加することは言及されていません。
この時点では可能ではないと思います。
リッチヒッキーは注釈がこのスレッド https://groups.google.com/group/clojure/browse_thread/thread/d2128e1505c0c117 にサポートしますが、私の知る限り、これが唯一のDeftype/defrecordためである加えることに言及しています。私はもちろん間違っている可能性があります。
これら
(ns genclass.example
(:gen-class ^{:doc "example class"}))
と
(ns genclass.example)
(with-meta
(gen-class
:name genclass.example.ClassA
:methods [[hello [] void]])
{:doc "Example class"})
の両方私のためにコンパイルに失敗します。例外から
Exception in thread "main" java.lang.IllegalArgumentException: Metadata can only be applied to IMetas (example.clj:4)`
これは可能ではないようです。
はい、それは、私がここに偉大な例を発見された:
(gen-class :name ^{Deprecated {}
SuppressWarnings ["Warning1"] ; discarded
java.lang.annotation.Target []}
clojure.test_clojure.genclass.examples.ExampleAnnotationClass
:prefix "annot-"
:methods [[^{Deprecated {}
Override {}} ;discarded
foo [^{java.lang.annotation.Retention java.lang.annotation.RetentionPolicy/SOURCE
java.lang.annotation.Target [java.lang.annotation.ElementType/TYPE
java.lang.annotation.ElementType/PARAMETER]}
String] void]])
に追加情報を追加するには:
https://github.com/clojure/clojure/blob/master/test/clojure/test_clojure/genclass/examples.clj
をここではそれが将来的に消えないようにインライン化いくつかのコードがありますこれは他の場所に文書化されていないので、コンストラクタにアノテーションを追加することも可能です。
コンストラクタペアの最初の配列にメタデータを追加することによって、コンストラクタに注釈を追加できます。
(gen-class
:name "FooClass"
:init "init"
:constructors {^{Inject {}} [Configuration] []}
:state "state"
:implements [FooInterface]
:prefix "ref-")
私はJAX-RS REST Serverの 'gen-class'の代わりに' deftype'を使い始めました。これはChasの本の例に従います。それは "クリーナー"と思われる。 – Ralph
次のフローチャートもChasによっても好きかもしれません。http://cemerick.com/2011/07/05/flowchart-for-choosing-the-right-clojure-type-definition-form/ 彼の本、私はまだそれを持っていない... – Paul
私はフローチャートが最初にツイッターに現れたときにそれを見た。かなりいい!ありがとう。 – Ralph