为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Spark

高级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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消