什么';下面的Clojure协议有什么问题?

什么';下面的Clojure协议有什么问题?,clojure,protocols,Clojure,Protocols,在Clojure 1.2中: (defprotocol PP (foo [bar]) (foo [bar baz])) => PP (extend-protocol PP Object (foo [bar] 1) (foo [bar baz] 2)) => nil (foo "hello!") => #<CompilerException java.lang.IllegalArgumentException: No single

在Clojure 1.2中:

(defprotocol PP 
  (foo [bar]) 
  (foo [bar baz]))
=> PP

(extend-protocol PP 
  Object 
    (foo [bar] 1) 
    (foo [bar baz] 2))
=> nil

(foo "hello!")
=> #<CompilerException java.lang.IllegalArgumentException: No single method: foo of interface: PP found for function: foo of protocol: PP
(defp协议)
(foo[bar])
(foo[bar baz]))
=>PP
(扩展协议PP)
对象
(foo[bar]1)
(foo[bar baz]2)
=>零
(福:“你好!”)

=>#我认为您的协议中的第二个
foo
正在重击第一个。在arity上重载的语法与您使用的略有不同

user> (defprotocol PP
        (foo [bar] [bar baz]))
PP
user> (extend-protocol PP
        Object
        (foo 
          ([bar] 1)
          ([bar baz] 2)))
nil
user> (foo "foo")
1
user> (foo "foo" "bar")
2

谢谢非常有趣,我没有意识到用这种方式覆盖定义是可能的。。。看起来有点鬼鬼祟祟的!