使用clojure函数,我可以定义:
(defn f [x & xs] (apply some-function x xs))
我试图用协议做同样的事情,例如
(defprotocol foo
(bar [f])
(baz [f & gs]))
这编译(至少在REPL中),但任何实现类型似乎都失败了(变量,baz)方法。官方不支持这个吗?我咨询的消息来源是沉默的。
答案 0 :(得分:11)
由于Stuart Sierra给出的原因,这不受支持。为了更详细一些,&
符号仅在诸如let
或函数参数的解构上下文中是特殊的。正如斯图尔特所说,defprotocol
不是这样的背景。
但是&
仍然是一个合法的符号,所以你已经定义了一个包含两个函数的协议:bar
接受一个名为f
的参数,baz
需要三个,名为f
,&
和gs
。
答案 1 :(得分:9)
正如following thread中对Stuart Sierra的回答,不支持可变方法,将来可能不支持