028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Scala的函数式编程-创新互联

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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:Scala的函数式编程-创新互联
文章路径:http://www.tsicrk.com/article/dhsodi.html

其他资讯

让你的专属顾问为你服务

2.4878s