Clojure 协议是否支持类型提示?
Do Clojure Protocols Support Type Hints?
Clojure 协议是否支持类型提示,以便可以像在静态类型语言中一样重载具有相同参数(类型提示除外)的相同方法名称?
例如,
(defprotocol IFoo
(get-val [this ^String astring])
(get-val [this ^AClass aclass]))
如果没有,我可以实现这个,还是必须重命名这些方法?
Afaik,你不能用 defprotocol
做到这一点,但用 definterface
还是可以的:
(definterface Intf
(^String add [^String s])
(^long add [^long l]))
(defrecord Rec [^long data]
Intf
(^String add [self ^String s] (str data s))
(^long add [self ^long l] (+ data l)))
user> (let [r (Rec. 101)]
[(.add r "asd")
(.add r 200)])
;;=> ["101asd" 301]
Clojure 协议是否支持类型提示,以便可以像在静态类型语言中一样重载具有相同参数(类型提示除外)的相同方法名称?
例如,
(defprotocol IFoo
(get-val [this ^String astring])
(get-val [this ^AClass aclass]))
如果没有,我可以实现这个,还是必须重命名这些方法?
Afaik,你不能用 defprotocol
做到这一点,但用 definterface
还是可以的:
(definterface Intf
(^String add [^String s])
(^long add [^long l]))
(defrecord Rec [^long data]
Intf
(^String add [self ^String s] (str data s))
(^long add [self ^long l] (+ data l)))
user> (let [r (Rec. 101)]
[(.add r "asd")
(.add r 200)])
;;=> ["101asd" 301]