scalaの名前付けパラメータ

916 ワード

scala if,whileなどのような制御構造を実現したい場合は,カッコ{}の直接的なコードに入力する値はありません.どうやって実現しますか.
たとえば,myAssert(),myAssert関数は,自己パラメータと標識変数を参照し,標識ビットがfalseであれば何もせず,trueであれば正常に判断する断言制御構造を実現する.
次は合理的な実装です.
 val assertionEnable = true 
 def myAssert( predicate: () => Boolean) = 
    if(assertionEnable && ! predicate()) throw new AssertionError

//myAssert         ,        ,            ,
    myAssert( () => 5>3)
//            ()  =>  ,     。
//    myAssert(   5>3)  //    ,     () =>

関数数の面量のパラメータリスト()と=>を省略すると良いのですが、コンパイルエラーが報告されます.
scalaの伝名パラメータは私たちの願いを実現することができて、伝名パラメータの定義:()=>ではなく=>で開始します;これで僕らの
需要.名前パラメータを定義した関数が名前関数です.
  def byNameAssert( predicate: => Boolean) = 
    if(assertionEnable && ! predicate) throw new AssertionError
byNameAssert(5>3)  //