Scala 映射、zipWithIndex 和中缀形式

Scala map, zipWithIndex and infix form

我有下一个代码:

List.tabulate(n, n)(_ * _).zipWithIndex.map{case (list, index) => index :: list}

我想按照http://docs.scala-lang.org/style/method-invocation.html的建议来写,所以中缀形式:

val n = 10
val list = List.tabulate(n, n)(_ * _) zipWithIndex map{case (list, index) => index :: list}

但这会停止编译。为什么?什么时候可以使用中缀,什么时候不能使用,而不是我给出的 link 有什么更好的解释吗?它看起来不像是在解释不同 Arity 的链式调用,就像我在做的那样

两个zipWithIndex都不带参数所以不能写在中缀位置。尝试:

val n = 10
val list = List.tabulate(n, n)(_ * _).zipWithIndex map { case (list, index) => index :: list }

但是,如果您指的是后缀,那就是 Peter 提到的已弃用和劝阻。如果你坚持,你将不得不 import scala.language.postfixOps.

即便如此,您也无法将后缀与中缀表示法结合起来。

import scala.language.postfixOps
val n = 10
val list = List.tabulate(n, n)(_ * _) zipWithIndex 
val result = list map { case (list, index) => index :: list }