在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相当于什么?
答案 0 :(得分:8)
简称为reduce:
user> (reduce + (range 1e6))
499999500000
user> (reduce + [])
0
在第二种情况下,零的结果来自于加法的标识值为零的事实,因此如果您在没有参数的情况下调用+
函数,它将返回0. *
返回值将是一个。这要求您传递的函数能够处理使用零个,一个或两个参数调用的函数。您可以通过将初始值指定为第三个参数来防止此行为,在这种情况下,如果列表为空,则永远不会调用reduce函数。
user> (reduce * -1 [])
-1
Reduce在调用支持此类的集合(如向量)时也使用forkjoin框架。