ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

58 Scala高阶函数

2022-02-09 17:00:20  阅读:158  来源: 互联网

标签:58 val Scala Int println 高阶 隐式 def String


高阶函数

  • scala中函数和IntString、Class等其他类型处于同等地位
  • 可以向其他类型的变量一样被传递和操作

作为值的参数

  • 可以将函数传递给一个方法
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
}

隐式转换与隐式参数

  • 隐式转换指以implict关键字声明的带有单个参数的方法
  • 它是自动调用的,自动将某种类型转换为另外一种类型

使用隐式转换

  • 当对象调用类中不存在的方法或者成员时,编译器会自动将对象进行隐式转换
  • 当方法中的参数类型与目标类型不一致时,编译器会自动将对象进行隐式转换
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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有