美文网首页
scala函数和闭包

scala函数和闭包

作者: 平头哥2 | 来源:发表于2020-05-02 19:56 被阅读0次

Function and closure

//1. method
def processFile(filename: String, width: Int): Unit = {

  val source = Source.fromFile(filename)
  for( line <- source.getLines())
    processLine(filename, width, line)
}
def processLine(filename : String,width: Int, line:String): Unit ={
  if(line.length > width)
    println(filename +" : "+ line.trim)
}
//2. local function
def processFile(filename: String, width: Int): Unit = {

  def processLine(line:String): Unit ={
    if(line.length > width)
      println(filename +" : "+ line.trim)
  }

  val source = Source.fromFile(filename)
  for( line <- source.getLines())
    processLine(line)
}
//3.  函数
/**
 * function and closure
 *
 * scala 的函数时头等公民
 * 1. 不仅仅是 函数可以定义和调用
 * 2. 函数可以写为一个 函数字面量 并且作为值进行传递
 *
 * 函数字面量 在编译阶段会被编译为一个类,在运行阶段会被初始化为一个函数值
 * 区别:
 *  函数字面量 存在于源码中
 *  函数值: 作为一个对象存在于运行时
 *
 */

object FunDemo {

  def main(args: Array[String]): Unit = {
    //函数字面量的定义
    (x: Int) => x+1
  }
}
//函数字面量定义
scala> var inc = (x : Int) => x+2
inc: Int => Int = $$Lambda$776/733224796@24c685e7
//使用
scala> inc(3)
res0: Int = 5
//函数字面量的定义
 val inc = (x: Int) => x + 1
 println(inc(2))
 
 //案例
 val someNumbers = List(-11, -10, -5, 0, 5, 10)
 someNumbers.foreach((x: Int) => print(x+" ")) //-11 -10 -5 0 5 10
 val gt = someNumbers.filter((x: Int) => x > 3)
 println(gt) //List(5, 10)
 
 //化简
 someNumbers.foreach(x => print(x+" "))
 val gt2 = someNumbers.filter(x => x > 3) // List(5, 10)
 
 // PLACEHOLDER  SYNTAX
 someNumbers.foreach( _ => print _)
 someNumbers.foreach(print _)
 someNumbers.foreach(print)
 val gt3 = someNumbers.filter( _ > 3)
 
 //案例
 val f = (_: Int) + (_: Int)
 println(f(1,2))
object FunDemo {

  def main(args: Array[String]): Unit = {

    //案例
    val someNumbers = List(-11, -10, -5, 0, 5, 10)
    //someNumbers.foreach(print _) //print _ 其实是一个部分应用函数

    val res = sum _
    val b = res(1, _: Int, 3)
    println(b(2)) // 这里实际调用b.apply, 进而调用了sum(1,2,3)

    //闭包
    val more = 1
    val addMore = (x: Int) => x + more

    println(addMore(3))


    //可变参数
    def fun(arr: String*): Unit = {
      arr.foreach(println)
    }

    fun("a", "b", "c")

    val arr = Array("aa", "bb", "cc")
    fun(arr: _*)

    //带名字参数
    def fun02(time: Int, s: Float): Float = {
      s / time
    }

    println(fun02(s = 100.0F, time = 10)) //10.0

    //缺省参数
    def fun03(out: java.io.PrintStream = Console.out): Unit = {
      out.println("time "+ System.currentTimeMillis())
    }

    fun03()
  }

  def sum(a: Int, b: Int, c: Int): Int = {
    a + b + c
  }
}

相关文章

  • scala函数和闭包

    Function and closure

  • scala闭包函数

    闭包是一个函数,它返回值取决于在此函数之外声明的一个或多个变量的值。 以下代码是一个匿名函数。 val m=(i:...

  • Scala的函数和闭包

    函数(Functions) 函数在 Scala 中除了方法(methods)之外还有多种形态的存在,局部函数(lo...

  • scala之函数和闭包

    函数和闭包 方法 局部函数:函数里面嵌套函数 局部函数可以访问包含它们的函数的参数,因此上面的函数可以改造为如下形...

  • Scala中的闭包

    笔者认为 Scala 的闭包是一种介于全局变量和函数局部私有变量之间的数据访问机制 闭包是一个函数与其相关的引用环...

  • rust 闭包与同步

    rust 闭包与同步 rust 闭包 rust闭包中主要包括两个部分,闭包参数和闭包环境变量。闭包函数和函数参数使...

  • 函数对象和闭包

    函数对象和闭包 一) 函数对象 示例: 二)函数嵌套 三)闭包函数

  • 面试题(day-2)

    1 ,什么是闭包?闭包有什么好处?使用闭包要注意什么? 闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,...

  • Swift-闭包

    闭包的特点:一个函数有权访问另外一个函数内的变量和参数 闭包—匿名函数 结尾闭包 衍生 内容捕获 闭包和函数是引用类型

  • 闭包函数

    闭包函数 闭包,又称闭包函数或者闭合函数,其实和嵌套函数类似,不同之处在于,闭包中外部函数返回的不是一个具体的值,...

网友评论

      本文标题:scala函数和闭包

      本文链接:https://www.haomeiwen.com/subject/scllghtx.html