3

在这种情况下,为什么我需要 x:Int 周围的括号:

List(1,2,3,4,5).filter((x:Int) => x > 3)

但在这种情况下不是 x :

List(1,2,3,4,5).filter(x => x > 3)

如果我尝试:

List(1,2,3,4,5).filter(x:Int => x > 3)

我得到:

identifier expected but integer literal found

这到底是什么意思呢?

4

2 回答 2

8

括号显示参数类型的结束位置。由于该=>符号在 scala 类型中有效(表示函数类型),因此只有=>存在并不意味着该类型已结束。考虑一下:

List(Map(1->2)).filter((x: Int => Int) => x(1) == 2)

括号清楚地表明第一个=>是类型的一部分,x第二个是定义函数。

在您的第二个示例中,没有类型 on x,因此关于=>.

于 2013-01-02T22:09:46.660 回答
1

x: Int => Int- x 是类型的函数Int => Int

(x:Int) => ...- x 是函数参数

于 2013-01-02T22:26:41.447 回答