Scala的函数式编程
导读:本文共1853.5字符,通常情况下阅读需要6分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: Scala的函数式编程 Scala的函数式编程的特点 - 高阶函数 - 闭包 - 模式匹配 可参考:https://blog.51cto.com/14048416/2337136 - 单一赋值 - 延迟计算&ems... ...
目录
(为您整理了一些要点),点击可以直达。Scala的函数式编程
Scala的函数式编程的特点
- 高阶函数
- 闭包
- 模式匹配 可参考:https://blog.51cto.com/14048416/2337136
- 单一赋值
- 延迟计算
- 类型推导
- 尾部调用优化
- 隐式转化
这篇博文重点介绍:高阶函数、闭包、隐式转化。
1. 高阶函数
高阶函数主要有两种:将一个函数当做另外一个函数的参数和返回值是函数的函数。
2. 闭包
闭包是一个函数,返回值依赖与声明在函数外部的一个或者多个变量。
闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另一个函数。
例:
object Test01 { def main(args: Array[String]): Unit = { //定义一个闭包函数 def bibao() ={ var num:Int=0 //在闭包函数中定义一个函数,用于修改变量num的值 val add=(x:Int)=>{ num+=x num } //最终将这个函数返回 add } val result=bibao() println(result(1)) //1 println(result(2)) //3 println(result(3)) //6 }}
通过上面的案例我们了解到:每一次在调用result实际上是调用bibao方法中的add函数,然后对bibao方法中的num变量进行叠加,实现了使用另一个函数,访问其他方法中的局部变量的功能,这个就是闭包。当bibao调用的时候,就会申请一块内存区间,存储了add和num变量,bibao这个函数当被调用的时候,就返回了内存的一个函数add,调用的时候,result(1),相当于add(2),num的值就会被返回。当然如果重新调用一次bibao方法,这个num变量会被重新初始化。
闭包的弊端 : 在一个线程中,或者一个程序中,不能太多的定义这样的闭包函数,定义闭包函数时,其中的局部变量一定不能太大。因为闭包中的局部变量时常驻内存的,一旦定义之后,就一直在内存中,除非程序终止。
3. 隐式转化
scala的神奇之处:之前有过1 to 10 其实可以写成 1.to(10),那其实就是表示:1 是一个 Int 类型的变量,所以证明 Int 类中会有一个 to 的方法,但事实上,我们在 Int 类型中根本就没有寻找 to 方法,那也就是说对一个 Int 类型的变量 1 调用 Int 类型不存在的一个方法,这怎么还能正常运行 呢? 隐式转换
dome01:
object Test01 { def main(args: Array[String]): Unit = { //定义一个传入两个Int类型的方法 def m1(x:Int,y:Int):Int ={ x+y } //定义一个Double的转换成 Int类型 方法,隐式转化引入这个方法 implicit def m2(x:Double) = x.toInt //调用m1,并传入double类型的值 println(m1(3.5,2.6)) //没有报错,正常打印 }}
dome02:
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Scala的函数式编程的详细内容,希望对您有所帮助,信息来源于网络。