加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

8、高阶函数

发布时间:2020-12-16 09:24:31 所属栏目:安全 来源:网络整理
导读:普通函数 高阶函数:参数或返回值是函数 object a_基础 { def main(args: Array[String]): Unit = { println(mymax( 1 , 2 ,math.max)) println(myadd( 1 )( 2 )) } def mymax(a:Int,b:Int,f:(Int,Int) = Int)= { //f类型的映射即函数 f(a,b) } def myadd(a:

普通函数

高阶函数:参数或返回值是函数

object a_基础 {
  def main(args: Array[String]): Unit = {
    println(mymax(1,2,math.max))

    println(myadd(1)(2))
  }

  def mymax(a:Int,b:Int,f:(Int,Int) => Int)={  //f类型的映射即函数
    f(a,b)
  }

  def myadd(a:Int)={  //返回值类型是函数,inner _ 表示函数本身
    def inner(b:Int)={
      a + b
    }
    inner _
  }
}

匿名函数

scala> arr.map((i:Int) => i*2:Int)  //写明返回值类型
res24: Array[Int] = Array(2,4)

scala> arr.map((i:Int) => i*2)    //推断返回值类型
res25: Array[Int] = Array(2,4)
scala> arr.map((i) => i*2)    //类型推断
res29: Array[Int] = Array(2,4)

scala> arr.map(i => i*2)    //再简化
res30: Array[Int] = Array(2,4)
scala> arr.map(_*2)  //i就出现了一次,最终版
res32: Array[Int] = Array(2,4)

柯里化

定义:将原来接受两个参数的函数变成新的接受一个参数的函数的过程。即柯里化后的函数返回以原来第二个参数作为参数的函数

scala> def add(a:Int,b:Int)=a+b  //原函数
add: (a: Int,b: Int)Int^

scala> def add(a:Int)={b:Int => a + b}  //柯里化
add: (a: Int)Int => Int

scala> add(1)(2)
res0: Int = 3

scala> def add(a:Int)(b:Int) =a + b  //柯里化简化
add: (a: Int)(b: Int)Int

scala> add(3)(4)
res1: Int = 7

好处:将某个参数单独拎出来,以提供更多用于类型推断的信息

?

控制抽象

在scala中,一系列语句可组成不带参数也没有返回值的函数

object c_控制抽象 {
  def main(args: Array[String]): Unit = {
    runinthread(println(Thread.currentThread().getName()))
    runinthread(println(Thread.currentThread().getName()))
  }

  def runinthread(block: => Unit): Unit ={
    new Thread() {
      override def run(): Unit ={
        block
      }
    }.start()
  }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读