Clojure的协议功能可以像普通函数一样可变吗?

时间:2011-03-23 05:56:51

标签: clojure protocols

使用clojure函数,我可以定义:

(defn f [x & xs] (apply some-function x xs))

我试图用协议做同样的事情,例如

(defprotocol foo
  (bar [f])
  (baz [f & gs]))

这编译(至少在REPL中),但任何实现类型似乎都失败了(变量,baz)方法。官方不支持这个吗?我咨询的消息来源是沉默的。

2 个答案:

答案 0 :(得分:11)

由于Stuart Sierra给出的原因,这不受支持。为了更详细一些,&符号仅在诸如let或函数参数的解构上下文中是特殊的。正如斯图尔特所说,defprotocol不是这样的背景。

但是&仍然是一个合法的符号,所以你已经定义了一个包含两个函数的协议:bar接受一个名为f的参数,baz需要三个,名为f&gs

答案 1 :(得分:9)

正如following thread中对Stuart Sierra的回答,不支持可变方法,将来可能不支持

相关问题