编程语言
首页 > 编程语言> > Scala 速通语法(十三)| 函数式编程

Scala 速通语法(十三)| 函数式编程

作者:互联网

函数式编程

偏函数 partial function

  val list = List(1,2,3,4,"哈哈哈")

  /***
   * 定义一个偏函数
   * 1. 输入为Any 输出为Int
   * 2. isDefinedAt(x: Any) 判断条件是否成立 ture 则执行 apply(v1: Any) false 则不执行
   * 3. apply(v1: Any) 对经过 isDefinedAt(x: Any) 过滤的值进行逻辑处理 v1为上函数 x
   */
  val  pf = new PartialFunction[Any,Int] {
    override def isDefinedAt(x: Any): Boolean = {
      x.isInstanceOf[Int]
    }

    override def apply(v1: Any): Int = {
      v1.asInstanceOf[Int]+1
    }
  }

  //map不能传入偏函数 偏函数类型为对象 需要用collect
  println(list.collect(pf))


  /**
   * 偏函数简写
   */

  def pf2 : PartialFunction[Any,Int] = {
    case i:Int => i + 1
    case i>0 => i
  }

  println(list.collect(pf2))

匿名函数

//对匿名函数的说明
//1. 不需要写 def 函数名
//2. 不需要写返回类型,使用类型推导
//3. = 变成 =>
//4. 如果有多行,则使用{} 包括
val triple = (x: Double) => {
  println("x=" + x)
  3 * x
}

闭包(closure)

函数柯里化(curry)

//说明
def mul(x: Int, y: Int) = x * y
println(mul(10, 10))

def mulCurry(x: Int) = (y: Int) => x * y
println(mulCurry(10)(9))

def mulCurry2(x: Int)(y:Int) = x * y
println(mulCurry2(10)(8))

标签:函数,Scala,Int,编程,v1,println,Any,def,速通
来源: https://www.cnblogs.com/zhy-god/p/15525152.html