gpt4 book ai didi

clojure - 以下 Clojure 协议(protocol)有什么问题?

转载 作者:行者123 更新时间:2023-12-02 07:24:58 24 4
gpt4 key购买 nike

在 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

我哪里出错了?我希望看到 1 作为 foo 函数的单参数版本的结果,因为“hello!”显然是 java.lang.Object 的一个实例。

最佳答案

我认为你的协议(protocol)中的第二个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

关于clojure - 以下 Clojure 协议(protocol)有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4892713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com