为什么我需要围绕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
究竟是什么意思?
答案 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是函数参数