scalaの名前付けパラメータ
916 ワード
scala if,whileなどのような制御構造を実現したい場合は,カッコ{}の直接的なコードに入力する値はありません.どうやって実現しますか.
たとえば,myAssert(),myAssert関数は,自己パラメータと標識変数を参照し,標識ビットがfalseであれば何もせず,trueであれば正常に判断する断言制御構造を実現する.
次は合理的な実装です.
関数数の面量のパラメータリスト()と=>を省略すると良いのですが、コンパイルエラーが報告されます.
scalaの伝名パラメータは私たちの願いを実現することができて、伝名パラメータの定義:()=>ではなく=>で開始します;これで僕らの
需要.名前パラメータを定義した関数が名前関数です.
たとえば,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) //