[英]ArityException occurs when clojure gen-class an interface with overloaded methods
我有一個Java接口,如下所示:
public interface Wrapper {
void error( Exception e);
void error( String str);
}
我正在嘗試使用gen-class在clojure中創建一個實現:
(ns myimpl)
(gen-class
:name myimpl
:implements [Wrapper]
:state state
:init init
:prefix "w-"
:main false
)
(defn- w-error [this ^Exception e]
(println e))
(defn- w-error [this ^String s]
(println s))
然后,我嘗試創建一個實例並在repl中調用該方法:
> (def w (myimpl. ))
> (.error w "oops")
這將給我一個ArityException:傳遞給:myimpl $ w-error的args(2)數目錯誤。
我在這里做錯了什么?
以下代碼恰好是對Clojure函數如何工作的誤解。
(defn- w-error [this ^Exception e]
(println e))
(defn- w-error [this ^String s]
(println s))
用defn
定義的“常規”函數不能按類型分派-僅按參數數量分派。
我相信這實際上將是一個有用且可行的功能,但我們必須解決多方法和協議實現問題 ,這些方法和方法實現一起滿足類型調度需求的80%。
我不知道您為什么特別收到Arity例外,但我想這並不重要。
最后,您可能有興趣在Java中實現Java接口,將實際功能委托給Clojure代碼。 這將需要AOT編譯Clojure項目,或者通過RT
, Var
等動態加載代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.