Scala编程(第4版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

8.5 占位符语法

为了让函数字面量更加精简,还可以使用下画线作为占位符,用来表示一个或多个参数,只要满足每个参数只在函数字面量中出现一次即可。例如,_ > 0是一个非常短的表示法,表示一个检查某个值是否大于0的函数:

可以将下画线当成是表达式中的需要被“填”的“空”。函数每次被调用,这个“空”都会被一个入参“填”上。举例来说,如果someNumbers被初始化(146页)成List(-11, -10, -5, 0, 5, 10)filter方法将首先把_ > 0中的空替换成-11,即-11 > 0,然后替换成-10,即-10 > 0,然后替换成-5,即-5 > 0,以此类推,直到List的末尾。因此,函数字面量_ > 0跟先前那个稍啰唆一些的x => x > 0是等价的,参考如下代码:

有时候当你用下画线为参数占位时,编译器可能并没有足够多的信息来推断缺失的参数类型。例如,假定你只是写了_ + _

在这类情况下,可以用冒号来给出类型,就像这样:

注意,_ + _将会展开成一个接收两个参数的函数字面量。这就是为什么只有当每个参数在函数字面量中出现不多不少正好一次的时候才能使用这样的精简写法。多个下画线意味着多个参数,而不是对单个参数的重复使用。第一个下画线代表第一个参数,第二个下画线代表第二个参数,第三个下画线代表第三个参数,以此类推。