其他分享
首页 > 其他分享> > 58 Scala高阶函数

58 Scala高阶函数

作者:互联网

高阶函数

作为值的参数

object demo01 {
  def main(args: Array[String]): Unit = {
    val func = (num:Int) => "*" * num

    println((1 to 10).map(func))
  }
}

匿名函数

object demo01 {
  def main(args: Array[String]): Unit = {
   println((1 to 10).map("*" * _))
  }
}

柯里化

object demo01 {
  def calc(x:Int, y:Int)(func_calc:(Int,Int) => Int) = {
    func_calc(x,y)
  }

  def main(args: Array[String]): Unit = {
    println(calc(10,10)(_ + _))
    println(calc(4,2)(_ / _))
  }
}

闭包

object demo01 {
  def main(args: Array[String]): Unit = {
    val y = 10
    val add = (x:Int) => {x + y}

    println(add(5))
  }
}
def add(x:Int)(y:Int) = {
    x + y
}

//上述代码相当于
def add(x:Int) = {
    (y:Int) => x + y
}

隐式转换与隐式参数

使用隐式转换

class RichFile(val file:File) {
    // 读取文件为字符串
    def read() = {
        Source.fromFile(file).mkString
    }
}

object RichFile {
    // 定义隐式转换方法
    implicit def file2RichFile(file:File) = new RichFile(file)
}

def main(args: Array[String]): Unit = {
    // 加载文件
    val file = new File("./data/1.txt")

    // 导入隐式转换
    import RichFile.file2RichFile

    // file对象具备有read方法
    println(file.read())
}

自动导入隐式转换

class RichFile(val f:File) {
  // 将文件中内容读取成字符串
  def read() = Source.fromFile(f).mkString
}

object ImplicitConvertDemo {
  // 定义隐式转换方法
  implicit def file2RichFile(f:File) = new RichFile(f)

  def main(args: Array[String]): Unit = {
    val f = new File("./data/textfiles/1.txt")

    // 调用的其实是RichFile的read方法
    println(f.read())
  }
}

隐式参数

object demo01 {
  def quote(what:String)(implicit delimiter:(String, String)) = {
    delimiter._1 + what + delimiter._2
  }
  object  ImplicitParm {
    implicit val DEFAULT = ("<<<", ">>>")
  }

  def main(args: Array[String]): Unit = {
    import ImplicitParm.DEFAULT
    println(quote("hello world"))
  }
}

标签:58,val,Scala,Int,println,高阶,隐式,def,String
来源: https://www.cnblogs.com/19BigData/p/15875770.html