暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Scala入门(七)—— 函数和闭包

瓜仔外卖券 2019-12-18
275

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

文章转载自瓜仔外卖券,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论