scala中的閉包


scala閉包

代碼示例:

package test.close_pack

import scala.collection.mutable.ArrayBuffer

/**
  * AUTHOR Guozy
  * DATE   2019/6/1-14:44
  **/
object F_clo {
  var votingName = "jack"
  val isOfVotingAge = (name: String) => {
    println(s"hello ${name},you name is ${votingName} when after change!!!")
  }

  var fruits = ArrayBuffer[String]()

  def addToBusk = (s: String) => {
    fruits += s
    println(fruits.mkString(","))
  }
}

  

package test.close_pack

import scala.collection.mutable.{ArrayBuffer, ListBuffer}

/**
  * AUTHOR Guozy
  * DATE   2019/6/1-14:43
  **/
object Mains {
  def main(args: Array[String]): Unit = {
    F_clo.isOfVotingAge("Dany")
    F_clo.isOfVotingAge("mack")
    printResult(F_clo.isOfVotingAge, "kindy")
    F_clo.votingName = "Computer"
    printResult(F_clo.isOfVotingAge, "nick")
    println("-----------------------------------------")
    F_clo.addToBusk("apple")
    F_clo.addToBusk("bananal")
    buyStaf(F_clo.addToBusk, "water")
    F_clo.fruits = ArrayBuffer[String]()
    buyStaf(F_clo.addToBusk,"blue")
    buyStaf(F_clo.addToBusk,"yellow")
  }

  def printResult(f: String => Unit, x: String): Unit = {
    f(x)
  }

  def buyStaf(f: String => Unit, x: String) = {
    f(x)
  }
}

 運行結果:

定義:

  1、所謂的閉包,即一個函數與一個與該函數引用的非局部變量引用環境,閉包允許函數直接訪問直接語法作用於之外的變量。

  2、閉包是滿足下面三個條件的一段代碼塊:

    a.代碼塊可以當做值來傳遞

    b.同時可以被任何擁有改制的對象按需執行

    c.可以引用上下穩重已經創建的變量

  3、一個閉包開始於一個函數以及定義在同一作用於的變量,然后它們彼此分開。當函數在某時刻被執行時,它仍然很神奇的知道早前引用的變量,甚至獲得任何變量的修改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM