6

私はClojureを学んでいます。それでも私は言語と哲学についてよく理解していません。

しかし、私はその言語にもっと精通したいと思っています。clojure.core/getしたがって、私はClojureコアAPIドキュメントを読み始め、ソースコードにいくつかの興味深いものを見つけました。

(defn get
  "Returns the value mapped to key, not-found or nil if key not present."
  {:inline (fn  [m k & nf] `(. clojure.lang.RT (get ~m ~k ~@nf)))
   :inline-arities #{2 3}
   :added "1.0"}
  ([map key]
   (. clojure.lang.RT (get map key)))
  ([map key not-found]
   (. clojure.lang.RT (get map key not-found))))

指定されたキーで値を取得するために、コードはclojurelang.RT/get関数を使用します。コードはドット演算子-を呼び出します(. clojure.lang.RT (get map key))

私の質問は、なぜ作者が(. clojure.lang.RT (get map key))の代わりに書いたのかということです (clojure.lang.RT/get map key)

技術的な違いはありますか?または何か利点はありますか?

4

1 に答える 1

8

Clojureのドットは、ホストの相互運用に使用されます(この場合はJavaクラスclojure.lang.RTを使用)。静的メソッドの慣用的な形式はですが、それは特別な形式(Classname/staticMethod args*)の呼び出しに拡張されます。.関数の場合、get基本的にClojureの実装の一部を見ています。下位レベルのClojureコードが上位レベルのマクロを使用する理由はありません。したがって、.フォームを直接使用します。

http://clojure.org/java_interopのドキュメントをご覧ください。

慣用句は上部と下部にあり、ドット演算子の呼び出しにどのように展開されるかを確認できます。静的メソッドに関連するビットは次のとおりです。

(Classname/staticMethod args*) ==> (. Classname staticMethod args*)
于 2013-03-13T03:28:04.663 に答える