有人可以提供一些例子/:
:\
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的功能是相反的,但是如果您可视化头部的折叠,这是有意义的。