scala的传名参数
生活随笔
收集整理的這篇文章主要介紹了
scala的传名参数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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) //有效?
轉載于:https://www.cnblogs.com/honeybee/p/5302643.html
總結
以上是生活随笔為你收集整理的scala的传名参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用arpspoof实现内网ARP欺骗
- 下一篇: 课堂测试