2人はClojureで同じことをしているようです。正式な構文は何ですか?^または:tagタグ付きのヒンティング戻り値?
(defn a ^int [] 4)
(defn b ^{:tag int} [] 4)
私はそれがより短いのでa
だと思います。
2人はClojureで同じことをしているようです。正式な構文は何ですか?^または:tagタグ付きのヒンティング戻り値?
(defn a ^int [] 4)
(defn b ^{:tag int} [] 4)
私はそれがより短いのでa
だと思います。
タグ以外のメタデータを含める必要がある場合は、b
のみを使用します。例えば、過渡コレクションを実装する場合、私はそれが同等と
(deftype Whatever [^:unsynchronized-mutable ^ITransientVector foo])
を書くことは完全に許容可能であることを
(deftype Whatever [^{:tag ITransientVector
:unsynchronized-mutable true} foo])
注意が必要しかし、私は個人的には、明示的なマップを好みます。
その 'a'は標準です。これまでClojureコードとClojureサイトのドキュメントで私が見てきた唯一のものです。タイプヒントの詳細については、hereを参照してください。
これが役に立ちます。
スピードの違いがあると、私はかなり驚いています。それはより速く髪をコンパイルするかもしれませんが、それは同じに動作し、コンパイルは一度だけ起こります。これをテストするのに便利なベンチマークはありますか? – amalloy
+1あなたの権利、もう一度試してみると時間がかかっていますが、両者は似ていますのでスピードは上がらないでしょう。それに応じて編集された投稿。 – adamjmarkham
+1。また、(a)は実際には(b)の構文的な砂糖なので、実行時に同じ結果が得られます。 – mikera
実際、intへの関数の型ヒントはもう動作しません。それは長くて倍増だ。また、ここに追加されたすべての組み合わせがあります:https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IFn.java#L97それは見た目に狂気ではありません。 – claj
@claj神様、私はコードが何らかの形で生成されたことを願っています。さもなければ、私は貧しい汁がその仕事にこだわっていても、残念です。 – Carcigenicate
おそらくhttps://github.com/clojure/math.combinatoricsとhttps://clojuredocs.org/clojured.pprint/cl-formatの組み合わせ – claj