什么是Scala的seq.reduceOption的Clojure等价物?

时间:2014-02-12 21:42:19

标签: scala clojure reduce

在Scala的Collections库中,我们看到Seq Class有reduceOption方法:

def reduceOption[A1 >: A](op: (A1, A1) ⇒ A1): Option[A1]
  

使用指定的关联二元运算符减少此序列的元素(如果有)。“

这有another great explanation here

  

reduceOption来节省一天!如果reduce因集合为空而失败,则会返回None而非Some(returnvalue)非空集合。

我的问题是: Scala的seq.reduceOption的Clojure相当于什么?

1 个答案:

答案 0 :(得分:8)

简称为reduce:

user> (reduce + (range 1e6))
499999500000  

user> (reduce + [])
0

在第二种情况下,零的结果来自于加法的标识值为零的事实,因此如果您在没有参数的情况下调用+函数,它将返回0. *返回值将是一个。这要求您传递的函数能够处理使用零个,一个或两个参数调用的函数。您可以通过将初始值指定为第三个参数来防止此行为,在这种情况下,如果列表为空,则永远不会调用reduce函数。

user> (reduce * -1 [])
-1 

Reduce在调用支持此类的集合(如向量)时也使用forkjoin框架。