Scala的函数式编程

发布时间:2020-06-15 11:30:56 作者:原生zzy
来源:网络 阅读:453

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:
Scala的函数式编程

推荐阅读:
  1. Scala的actor
  2. Scala的泛型

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

scala 函数式 编程

上一篇:go语言创建map的方法

下一篇:linux环境下查看数据库的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》