首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Scala学习笔记02

函数入门

函数的定义与调用,在Scala中定义函数时,需要定义函数的函数名、参数、函数体。

Scala要求必须给出所有参数的类型,但是不一定给出函数返回值的类型,只要右侧的函数体不包含递归的语句,Scala就可以自己根据右侧的表达式推断出返回类型。

在代码块中定义包含多行语句的函数体

单行的函数,

如果函数体中有多行代码,则可以用代码块的方式包裹多行代码,代码块中最后一行的返回值就是整个函数的返回值,与Java中不同,不是使用return返回值的。

递归函数与返回类型,如果在函数体内递归调用函数自身,则必须手动给出函数的返回类型。

默认参数和带名参数

默认参数,在Scala中,有时我们调用某些函数时,不希望给出具体的参数值,而希望使用参数自身默认的值,此时就在定义函数时使用默认参数。

如果给出的参数不够,则会从左到右依次应用参数。

带名参数,在调用函数时,也可以不按照函数定义的参数顺序来传递参数,而是使用带名参数的方式来传递。

还可以混合使用未命名参数和带名参数,但是未命名参数必须排在带名参数前面。

变长参数

如果函数体包含在花括号中,但没有前面的=号,那么返回类型就是Unit,这样的函数被称为过程,过程不返回值,我们调用它仅仅是为了它的副作用,有人不喜欢这种简明写法定义过程,并建议大家总是显式声明Unit返回类型。

在Scala中,有时我们需要将函数定义为参数个数可变的形式,则此时可以使用变长参数定义函数。

使用序列调用变长参数,如果想要将一个已有的序列直接调用变长参数函数,是不对的,如。此时需要使用Scala特殊的语法将参数定义为序列,让Scala解释器能够识别。

使用递归函数实现累加,

过程、lazy值和异常

过程,在Scala中,定义函数时,如果函数体直接包裹在了花括号里面,而没有使用=连接,则函数的返回值类型就是Unit。这样的函数称为过程。过程通常用于不需要返回值的函数。

过程还有一种写法,就是将函数的返回值类型定义为Unit。

lazy值,如果将一个变量声明为lazy,则只有在第一次使用该变量时,变量对应的表达式才会发生计算,这种特性对于特别耗时的操作特别有用,比如打开文件进行IO,进行网络IO等。

,即使文件不存在也不会报错,只有第一个使用变量时会报错,证明了表达式计算的lazy特性。

异常

本文首发于steem,感谢阅读,转载请注明。

https://steemit.com/@padluo

微信公众号「数据分析」,分享数据科学家的自我修养,既然遇见,不如一起成长。

数据分析

读者交流电报群

https://t.me/sspadluo

知识星球交流群

知识星球读者交流群

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180324G0URFN00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券