Scala提供了许多方法去除冗余信息并把函数字面量写得更简短。注意留意这些东西,因为它们能让你去掉代码里乱七八糟的东西。一种让函数字面量更简短的方式是去除参数类型。因此,前一节带过滤器的例子可以写成这样:
object Test1 {
def main(args:Array[String]):Unit = {
val someNumbers= List(-11,-10,-5,0,5,10)
someNumbers.filter((x) => x > 0).foreach((x) => println(x))
}
}
Scala编译器知道x一定是整数,因为它看到你使用了这个函数过滤整数列表(由someNmbers暗示)。这被称为目标类型化:target typing,因为表达式的目标使用(本例中目标就是someNumbers中的元素,它会作为参数传入)影响了表达式的类型化(x的类型)。目标类型化的精确细节并不重要。你可以简单地从编写一个不带参数类型的函数字面量开始,并且,如果编译不能识别,再加上类型。几次之后你就对什么情况下编译器能解开谜题有感觉了。
因为某些参数的类型是被推断的,所以可以不用定义入参的类型,甚至外面的小括号也不用写,尽可能的减少字符的输入(注:如果参数类型不能被推断,参数类型与小括号都是必须要的)。如例:
object Test1 {
def main(args:Array[String]):Unit = {
val someNumbers = List(-11,-10,-5,0,5,10)
someNumbers.filter(x => x > 0).foreach(x => println(x))
}
}
结果: