在定義了一條記錄及其實現的接口之後,我可以通過它的名稱或使用點運算符的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的的兩個直列(它們中的至少一個必須是在
extend-*
形式),記錄(構造函數)和協議(調用)的erop形式。在這種情況下:(吃( - >動物「鮑勃」)) – 2014-07-15 17:16:26