高级for循环和for推导式
1、变量<-表达式 的形式提供多个生成器,用分号将他们隔开
2、每个生成器都可以带一个守卫,以if开头的Boolean表达式
if 之前没有分号
3、你可以使用任意多的定义,引人可以在循环中使用的变量:
4、如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值:
这类循环叫做for推导式
5、for推导式生成的集合与它的第一个生成器是类型兼容的
6、在Scala中,你也可以将生成器、守卫和定义包含再花括号中,并可以以换行的方式而不是分号隔开它们
函数
1、Scala中除了方法还支持函数。要定义函数,要给出函数的名称、参数和函数体,例如:
必须给出所有参数的类型。不过只要函数不是递归的,就不需要指定返回类型。Scala编译器可以通过 = 符号右侧的表达式的类型推断返回类型。
2、如果函数体需要多个表达式完成,可以用代码块。块中最后一个表达式的值就是函数的返回值。
举个例子:
这个函数返回位于for循环之后的r的值。在本例中并不需要用到return,我们可以像Java或C++那样使用return,来立即从某个函数退出,不过在Scala中这种做法并不常见。
3、虽然在带名函数中使用 return 并没有什么不对,但是再匿名函数中却不同。匿名函数中的 return 并不反回值给调用者。它跳出到包含它的带名函数中。可以把 return 当作函数版本的 break 语句,仅在需要时使用。
4、对于递归函数,我们必须指定返回类型。举个例子:
如果没有返回类型,Scala编译器无法校验
n * fac(n - 1)的类型是 Int
作者:独行者独行者
链接:https://www.jianshu.com/p/96c3e28c99ae