Как работает разрешение имен методов defrecord в clojure?

После определения записи и интерфейсов, которые она реализует, я могу вызывать ее методы либо по ее имени, либо с использованием способа взаимодействия Java с использованием оператора точки.

 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, чтобы они вам не понадобились файл. оператор, чтобы поведение было как указано выше? (Например, с целью унификации пользовательского интерфейса)

14
задан bmillare 29 January 2011 в 19:41
поделиться