レコードとそれが実装するインタフェースを定義した後、そのメソッドをその名前で呼び出すか、ドット演算子を使ってjava interopの方法で呼び出すことができます。表面の下clojureのdefrecordメソッドの名前解決はどのように機能しますか?
user=> (defprotocol Eat (eat [this]))
Eat
user=> (defrecord animal [name] Eat (eat [this] "eating"))
user.animal
user=> (eat (animal. "bob"))
"eating"
user=> (.eat (animal. "bob"))
"eating"
user=>
、何が起こっているの?新しいclojure関数が定義されていますか?同じ名前を共有する関数を定義した場合(これは可能でしょうか?)、これらのあいまいさはどのように解決されますか?
また、他のjavaオブジェクトのjavaメソッドを "インポート"することも可能です。演算子は、上記のような動作ですか?
マイ文体の好みは、Javaのintを回避することですレコード(コンストラクター)とプロトコル(呼び出し)の両方に対するeropフォーム。この場合:(食べ物( - >動物 "ボブ")) –