上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
7.9 结语
Scala内建的控制结构很小,但能解决问题。它们跟指令式的控制结构类似,但由于有返回值,它们也支持更函数式的编程风格。同样重要的是,它们很用心地略去了一些东西,让Scala最强大的功能特性之一,函数字面量,得以发挥威力。函数字面量将在下一章详细介绍。
[1]原书这里表述有误,有没有等号不是关键,结果类型是否为Unit才是关键。当结果类型为Unit时,写不写等号都可以;结果类型不为Unit时,则必须写等号。——译者注
[2]示例7.4中的gcd函数使用了跟示例6.3中类似命名的,用来帮Rational计算最大公约数的函数相同的算法。主要的区别在于示例7.4的gcd针对的是Long类型的参数而不是Int。
[3]意思是寻求不需要使用while的方案。——译者注
[4]准确地说,在for表达式的<-符号右侧的表达式可以是任何拥有某些特定的带有正确签名的方法的类型。第23章将会详细介绍Scala编译器对for表达式的处理机制。
[5]虽然你必须用花括号将catch子句中的case语句包起来,try和finally并没有这个要求,当只有一个表达式时,花括号并不是必需的,比如:try t() catch { case e: Exception => ... } finally f()。
[6]这个规则有几个例外,因为在Scala中有时候可以用花括号来替代圆括号。举个例子来说就是7.3节的for表达式可选项语法。
[7]示例7.18中的printMultiTable函数是以指令式风格编写的,我们将在下一节重构成函数式的风格。
[8]对了,这里的首个a定义后的分号是必需的,因为Scala的分号推断不会帮我们在这个位置自动添加分号。