zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Scala入门到精通——第五节 函数与闭包

scala入门 函数 精通 闭包
2023-09-14 09:00:25 时间

函数字面量(function literal),也称值函数(function values),指的是函数可以赋值给变量。

一般函数具有如下形式:
这里写图片描述

而函数字面量具有如下形式:


//数组的map方法中调用(写法1) scala println(Array(1,2,3,4).map(increase).mkString(",")) 2,3,4,5
//匿名函数写法(写法2)

scala println(Array(1,2,3,4).map((x:Int)= x+1).mkString(","))

2,3,4,5

//函数只有一个参数的话,可以省略()(写法6) scala Array(1,2,3,4) map{x= x+1} mkString(",") res28: String = 2,3,4,5 //如果参数右边只出现一次,则可以进一步简化(写法7) scala Array(1,2,3,4) map{_+1} mkString(",") res29: String = 2,3,4,5
scala val fun0=1+_ console :10: error: missing parameter type for expanded function ((x$1) = 1 x$1)) //值函数简化方式(正确方式) scala val fun1=1+(_:Double) un1: Double = Double = function1 scala fun1(999) es30: Double = 1000.0 //值函数简化方式(正确方式2) scala val fun2:(Double)= Double=1+_ fun2: Double = Double = function1 scala fun2(200) res31: Double = 201.0
scala def convertIntToString(f:(Int)= String)=f(4) convertIntToString: (f: Int = String)String scala convertIntToString((x:Int)= x+" s") res32: String = 4 s //高阶函数可以产生新的函数 //(Double)= ((Double)= Double) scala def multiplyBy(factor:Double)=(x:Double)= factor*x multiplyBy: (factor: Double)Double = Double scala val x=multiplyBy(10) x: Double = Double = function1 scala x(50) res33: Double = 500.0
//(x:Int)= x+more,这里面的more是一个自由变量(Free Variable),more是一个没有给定含义的不定变量 //而x则的类型确定、值在函数调用的时候被赋值,称这种变量为绑定变量(Bound Variable) scala (x:Int)= x+more console :8: error: not found: value more (x:Int)= x+more scala var more=1 more: Int = 1 scala val fun=(x:Int)= x+more fun: Int = Int = function1 scala fun(10) res1: Int = 11 scala more=10 more: Int = 10 scala fun(10) res2: Int = 20 //像这种运行时确定more类型及值的函数称为闭包,more是个自由变量,在运行时其值和类型得以确定 //这是一个由开放(free)到封闭的过程,因此称为闭包 scala val someNumbers = List(-11, -10, -5, 0, 5, 10) someNumbers: List[Int] = List(-11, -10, -5, 0, 5, 10) scala var sum = 0 sum: Int = 0 scala someNumbers.foreach(sum += _) scala sum res8: Int = -11 scala someNumbers.foreach(sum += _) scala sum res10: Int = -22 //下列函数也是一种闭包,因为在运行时其值才得以确定 def multiplyBy(factor:Double)=(x:Double)= factor*x

添加公众微信号,可以了解更多最新Spark、Scala相关技术资讯
这里写图片描述


十分钟带汝入门大数据开发语言Scala Scala是一门多范式的编程语言,一种类似Java的编程语言 ,设计初衷是实现可伸缩的语言 、并集成面向对象编程和函数式编程的各种特性。目前最主流的大数据开发框架Spark的实现就是通过Scala去实现的。Scala可以与Java互操作。它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码),也可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。
Scala入门系列终章:类与对象 截至本篇,Scala入门系列即将告一段落,先后用7篇文章将Scala语言的四梁八柱进行了简要介绍,虽然阅读量相较于其他文章更为惨淡,但相信对于有一定编程语言基础又想快速入门Scala的读者来说还是会有一定收获和借鉴的。 本文作为该系列的最后一篇,将重点介绍Scala中类和对象的概念,毕竟Scala也是一门面向对象的编程语言。 坦白讲,个人在学习Scala中这一部分内容时其实也是有些凌乱的,一直觉得未能理解到Scala中类和对象的精髓,所以当下完成此文也仅仅是出于系列内容的完整性,后续也将适时推出其他分享。