如何在Scala中使用带有多个命名参数的表格?

时间:2014-07-11 05:55:28

标签: scala

背景

我看到的例子如下:

val squares = List.tabulate(6)(n => n * n)          // one parameter, named parameter
val mul = List.tabulate(4,5)( _ * _ )               // two parameters, unnamed parameters

问题

两个参数的正确语法是什么,都命名为?

val squares = List.tabulate(3,3)(i,j => i * j - 3*j)    // two parameters, named parameters

给了我一个error: too many arguments for method tabulate:,因为它将ij之间的逗号解释为参数分隔符。

1 个答案:

答案 0 :(得分:2)

在scala中,匿名函数应该像这样定义:

(x: Int, y: String, z: Long, ...) => {
  ...
} : Unit

首先,可以推断出返回类型,因此我们可以省略它:

(x: Int, y: String, z: Long, ...) => {
  ...
}

其次,如果方法体只有一个语句,则可以省略大括号:

(x: Int, y: String, z: Long, ...) => ...

第三,如果可以推断出函数的参数类型,我们可以省略它:

List(1, 2, 3).reduceLeft( (x, y) => x + y )

最后,如果可以推断出函数的参数类型,并且只有一个参数,则可以省略参数列表周围的括号:

List(1, 2, 3).map(x => x * 2)

所以在你的情况下,你应该写val squares = List.tabulate(3,3)((i,j) => i * j - 3*j)