函数和闭包之函数字面量的短格式

本文介绍了Scala如何通过去除冗余信息和简化函数字面量来提高代码效率,具体展示了如何利用目标类型化进行参数类型的省略,以及在实际编程中如何应用这一特性。

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))
    }
}

结果:

223913_85El_168814.jpg

转载于:https://my.oschina.net/fhd/blog/276615

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值