object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello Scala")}
本章主要介绍一些函数方法的使用,概念性相对比较强,难度不大,大家快拿出小本本记下来。

方法
定义函数最常用的方式是作为某个对象的成员,这样的函数被称为方法。按照惯例,举例说明。如下:

date.txt

输出

这就是方法在开发中的用处,这段代码相信大家都能看的懂,这里就不做过多的介绍了。
局部函数
上面用的processLine方法前面加了private关键字来修饰,目的是我希望这个方法不被外部调用,而像上面的这个例子只有processFile一个方法调用它,那我完全可以把它改写成局部函数,就像局部变量一样,这样的局部函数只在包含它的代码块中可见,如下:

一等函数
Scala支持一等函数,不仅可以定义函数并调用它们,还可以用匿名的字面量来编写函数并将它们作为值进行传递,函数字面量呗编译成类,并在运行时实例成函数值。
函数字面量的简单实例:
(x:Int)=>x+1
函数值是对象,所以可以将它们存放在变量中,它们同时也是函数,所以也可以用常规的圆括号来调用它们。下面给出两个示例

如果你想要在函数字面量中包含多于1条语句,可以将函数体用花括号括起来,组成代码块。当函数值被调用时,所有的语句都会被执行,并且该函数的返回值就是对最后一个表达式求值的结果。来个例子:

现在你已经看到了函数字面量的用法和细节,在Scala中很多地方都会用着它,例如,所有的集合类都提供了foreach方法,它接受一个参数作为入参,并对它的每个元素调用这个函数,下面看个例子:

再来个例子,集合类使用filter

函数字面量的简写形式
(x:Int)=>x>0中的参数类型是可以省略的,就变成(x)=>x>0,括号也可省略,最终为x=>x>0。

占位符语法
为了让函数字面量更加的精简,还可以使用下换线作为占位符,用来表示一个或者多个参数,主要满足每个参数只在函数字面量中出现一次即可,例如 _>0:

有的时候编译器没有足够多的信息来推断缺失的参数类型。假如:

这个时候可以自己添加类型:

闭包
到目前为止,所有的函数字面量都只是引入了传入的参数,比如前面所提到的x=>x>0,但是不是所有的场景都能给出确定的0,这个时候就需要引入一个变量,比如x=x>more,那么more从哪里来呢,所有要先定义一个more变量作为入参,看例子:

运行时从这个函数字面量创建出来的函数值被称为闭包。
特殊的函数调用形式
重复参数
直接来例子:


arr:_*是将数组的每个元素作为参数传给echo。
今天分享的内容就到这里,谢谢大家。

No one but ourselves can degrade us.
—— E N D ——
配图:百度图片
文字:摘抄自《Scala编程》
公众号:亮仔大数据
长
按
关
注
作者:亮仔大数据
微信号 : bigdata_lz





