scala-関数デジタル面量、閉包、3種類の関数パラメータ形式

1317 ワード

  • 函数字面量:1つの関数を式として使用し、匿名関数の意味
    def m = (x: Int) => x + 1
    println(m(1))
  • がある.
  • 閉パッケージ:簡単に言えば、関数デジタル面量+自由変数である.実行時に自由変数を取得し、この関数の数値面量から関数オブジェクト(関数値)を作成します.閉パケット
    //   1
    //                :     ,        
    //    more     ,    makeInt    
    def makeInt(more: Int) = (x: Int) => x + more
    //     :   more    
    val inc1 = makeInt(1)
    println(inc1(10))
    
    //   2:                
    //    more,     
    var more = 1
    // makeInt   
    def makeInt = (x:Int) => x + more
    println(makeInt(2)) // 3
    more = 4
    println(makeInt(2)) // 6
    
    //   3:             
    var more = 1;
    val testList = List(2,3,4)
    // foreach           more,      
    testList.foreach(more += _)
    println(more)
    と呼ばれます.
  • の対応する関数値の結果を閉パケットと呼ぶ.関数値は閉という動作によって生じるからである.例えばinc 1とinc 99は閉パケット
  • である.
  • 閉パッケージという語は、自由変数を「キャプチャ」して関数のデジタル面量を閉じる動作
  • に由来する.
  • 閉パケット:自由変数が参照する値
  • ではなく、自由変数自体がキャプチャされる.
  • 関数呼び出しパラメータの3つの形式
  • パラメータを繰り返し、*
    def echo(args:String*)={
    	for(arg 
  • 名前付きパラメータ、順序は任意
    def echo(arg:String, time:String)={
    	println(arg)
    }
    echo(time="10", arg="arg")
    //   
    // arg
  • デフォルト値、デフォルト値:zero入力されていない場合は、0
    def echo(arg:String, time:String, zero:Int = 0)={
    	println(arg)
    }
  • に自動的に割り当てられます.