Scala菜鸟的进阶之路之控制结构和函数(三)

高级for循环和for推导式

1、变量<-表达式 的形式提供多个生成器,用分号将他们隔开

2、每个生成器都可以带一个守卫,以if开头的Boolean表达式


if 之前没有分号

3、你可以使用任意多的定义,引人可以在循环中使用的变量:


4、如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值:



这类循环叫做for推导式

5、for推导式生成的集合与它的第一个生成器是类型兼容的


Scala菜鸟的进阶之路之控制结构和函数(三)_第1张图片

6、在Scala中,你也可以将生成器、守卫和定义包含再花括号中,并可以以换行的方式而不是分号隔开它们

  

Scala菜鸟的进阶之路之控制结构和函数(三)_第2张图片

函数


1、Scala中除了方法还支持函数。要定义函数,要给出函数的名称、参数和函数体,例如:



必须给出所有参数的类型。不过只要函数不是递归的,就不需要指定返回类型。Scala编译器可以通过 = 符号右侧的表达式的类型推断返回类型。

      2、如果函数体需要多个表达式完成,可以用代码块。块中最后一个表达式的值就是函数的返回值。

举个例子:


Scala菜鸟的进阶之路之控制结构和函数(三)_第3张图片
这个函数返回位于for循环之后的r的值。在本例中并不需要用到return,我们可以像Java或C++那样使用return,来立即从某个函数退出,不过在Scala中这种做法并不常见。


3、虽然在带名函数中使用 return 并没有什么不对,但是再匿名函数中却不同。匿名函数中的 return 并不反回值给调用者。它跳出到包含它的带名函数中。可以把 return 当作函数版本的 break 语句,仅在需要时使用。

4、对于递归函数,我们必须指定返回类型。举个例子:

如果没有返回类型,Scala编译器无法校验
n * fac(n - 1)的类型是 Int

你可能感兴趣的:(Scala菜鸟的进阶之路之控制结构和函数(三))