【问题标题】:Can Clojure's protocol functions be variadic like ordinary functions?Clojure 的协议函数可以像普通函数一样可变参数吗?
【发布时间】:2011-03-23 05:56:50
【问题描述】:

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

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

我正在尝试使用协议做同样的事情,例如

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

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

【问题讨论】:

    标签: clojure protocols


    【解决方案1】:

    由于 Stuart Sierra 给出的原因,这不受支持。更详细地说,& 符号仅在像 let 或函数参数这样的解构上下文中是特殊的。正如 Stuart 明确指出的,defprotocol 不是这样的上下文。

    但是& 仍然是一个合法符号,所以你定义了一个具有两个函数的协议:bar 接受一个参数,命名为fbaz 接受三个参数,命名为f、@987654330 @ 和 gs

    【讨论】:

    【解决方案2】:

    正如following thread 中的 Stuart Sierra 所回答的那样,不支持可变参数方法,并且将来可能不支持

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      相关资源
      最近更新 更多