为什么我在这里需要括号?

时间:2013-01-02 22:04:24

标签: scala

为什么我需要围绕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

究竟是什么意思?

2 个答案:

答案 0 :(得分:8)

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

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

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

在您的第二个示例中,x上没有类型,因此对=>的角色没有任何歧义。

答案 1 :(得分:1)

x: Int => Int - x是Int => Int

类型的函数

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