scala傳名參數

傳名參數

示例來源於programming in scala函數

先看一個例子:ui

scala> def myAssert(predicate: () => Boolean) = {
     |   if (predicate()) println("true")
     |   else println("false")
     | }
myAssert: (predicate: () => Boolean)Unit

scala> myAssert {
     | () => 5 > 3
     | }
true

scala> myAssert {
     | 5 > 3
     | }
<console>:14: error: type mismatch;
 found   : Boolean(true)
 required: () => Boolean
       5 > 3

調用函數myAssert時,當直接傳5 > 3給它時會報錯,緣由是由於這個函數的定義使用的是傳值。也就是說會先將表達式5 > 3計算出結果,而後將結果傳給函數myAssert。若是想要傳遞5 > 3這個表達式,就要使用傳名參數。scala

傳名參數如何使用?

scala> def myAssert(predicate: => Boolean) {
     | if (predicate) println("true")
     | else println("false")
     | }
myAssert: (predicate: => Boolean)Unit

scala> myAssert {
     | println("Hello")
     | 5 > 3
     | }
Hello
true

也就是說,傳名參數,適用於參數類型是無參函數的狀況,而且使用時須要將圓括號去掉:predicate: => Boolean。此時在調用函數時,就不會使用傳值參數,而是會把花括號中的部分包裹成一個匿名函數,以函數值的形式做爲參數傳遞下去。這樣作的結果就是使用起來跟內建的控制結構同樣。code

相關文章
相關標籤/搜索