Scala map,zipWithIndex和infix表单

时间:2015-07-23 14:35:14

标签: scala coding-style

我有下一个代码:

vmware workstation

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

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

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

1 个答案:

答案 0 :(得分:1)

两个zipWithIndex都不接受参数,因此您无法将其写入中缀位置。尝试:

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

但是,如果你的意思是后缀,那就像彼得提到的那样弃用并且气馁。如果你坚持,你必须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 }