继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕码人8056858
关注TA
已关注
手记 1238
粉丝 350
获赞 1323

高级for循环和for推导式

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

webp

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


webp

if 之前没有分号

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


webp

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


webp


这类循环叫做for推导式

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


webp

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

  

webp

函数


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


webp


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

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

举个例子:


webp

这个函数返回位于for循环之后的r的值。在本例中并不需要用到return,我们可以像Java或C++那样使用return,来立即从某个函数退出,不过在Scala中这种做法并不常见。


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

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

webp

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



作者:独行者独行者
链接:https://www.jianshu.com/p/96c3e28c99ae


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP