有人可以提供一些例子

/: :\ and /:\

居然习惯了?我认为它们是reduce / fold方法的快捷方式,但是没有关于如何在Scala文档中实际使用它们的示例,并且无法在StackOverflow上进行Google搜索。

最佳答案

/:foldLeft:\的同义词。

但是请记住,foldRight使:应用于其右侧的对象。

假设您知道/:是一个等效于(_ * _)的匿名函数,并且foldLeft和foldRight的签名为

def foldLeft  [B] (z: B)(f: (B, A) ⇒ B): B
def foldRight [B] (z: B)(f: (A, B) ⇒ B): B


即,它们是采用起始值的咖喱函数,以及将起始值/累加器与列表中的一项组合在一起的函数,例如:

List(1,2,3).foldLeft(1)(_*_)


这与

(1 /: List(1,2,3))(_*_)




List(1,2,3).foldRight(1)(_*_)


中缀表示法是

(List(1,2,3) foldRight 1)(_*_)


这与

(List(1,2,3) :\ 1)(_*_)


添加您自己的收藏和功能并享受!

简短的((a, b) => a * b/:)表示法要记住的是,因为使用的是infix表示法,因此需要在第一部分的前面加上括号,以使其能够正确地选择第二个参数列表。另外,请记住,foldLeft和foldRight的功能是相反的,但是如果您可视化头部的折叠,这是有意义的。

09-30 16:37