背景
我看到的例子如下:
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:
,因为它将i
和j
之间的逗号解释为参数分隔符。
答案 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)