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

8.10 结语

本章带你全面地了解了Scala中的函数。不仅限于方法,Scala还提供了局部函数、函数字面量和函数值 ;不仅限于普通的函数调用,Scala还提供了部分应用的函数和带有重复参数的函数等。只要可能,函数调用都会以优化过后的尾部调用实现,因此许多看上去很漂亮的递归函数运行起来也能跟用while循环手工优化的版本一样快。下一章我们将在此基础上继续向你展示Scala对函数的丰富支持如何帮助你更好地对控制进行抽象。

[1]在本书里,我们通常不会在示例应用程序中检查命令行参数的有效性,这既是为了节约树木,同时也是为了减少那些可能会让示例中重要代码变得不那么直观的样板代码。这里做的取舍是,当遇到有问题的输入时,我们的应用程序会抛出异常,而不是产出有帮助的错误提示。

[2]每个函数值都是某个扩展自scala包的FunctionN系列当中的一个特质的类的实例,比如Function0表示不带参数的函数,Function1表示带一个参数的函数,等等。每一个FunctionN特质都有一个apply方法用来调用该函数。

[3]foreach方法定义在Iterable特质里,这是Lits、Set、Array和Map的通用超特质。详情请参考第17章。

[4]通常我们会说对某些参数应用某个函数,根据上下文,有时候我们也会反过来说将某些参数应用到某个函数。——译者注

[5]生成的类扩展自Function3这个特质,该特质声明了一个三参数的apply方法。

[6]Java则不同,Java的内部类完全不允许我们访问外围作用域的可修改变量,所以本质上捕获变量和捕获它的值之间并没有差别。