2013-10-07 65 views
1

爲什麼這個工程?在斯卡拉使用下劃線

def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p(_)) } 

而這不?

def exists(s: Set, p: Int => Boolean): Boolean = { forall(s, !p()) } 

forall是一個函數,而p是謂語。

+2

p取參數。在一種情況下,你傳遞一個參數,而在另一種情況下你不傳遞一個參數。 – stonemetal

回答

5

對謂詞的調用需要傳遞一個參數,所以如果不傳遞任何東西(這就是p()正在做什麼)就不能調用它。

下劃線是「當前值」的一種Scala short-hand,其中該值是要傳遞給p的Int。如果我們明確地將Int標記爲i,則該脫糖爲:

{ forall(s, (i: Int) => !p(i)) }