Rob*_*lan 11 protocols clojure
使用clojure函数,我可以定义:
(defn f [x & xs] (apply some-function x xs))
Run Code Online (Sandbox Code Playgroud)
我试图用协议做同样的事情,例如
(defprotocol foo
(bar [f])
(baz [f & gs]))
Run Code Online (Sandbox Code Playgroud)
这编译(至少在REPL中),但任何实现类型似乎都失败了(变量,baz)方法.官方不支持这个吗?我咨询过的消息来源是沉默的.
ama*_*loy 11
由于Stuart Sierra给出的原因,这不受支持.为了更详细一些,该&符号仅在解构上下文let或函数参数中是特殊的.正如斯图尔特所说,defprotocol不是这样的背景.
但&仍然是一个合法的象征,所以你定义的协议有两个功能:bar它有一个参数命名f,并baz有三个,命名f,&和gs.