2011-05-13 85 views
1

圍繞最終元組的圓括號真的需要嗎?如果沒有它們,編譯器會嘗試僅添加Sort(「time」),並抱怨它期望使用一個元組。Scala:爲什麼我必須在這裏放置額外的括號?

val maxSortCounts: Map[Sort, Int] = 
    sorts.map(s => s -> usedPredicates.map(pred => pred.signature.count(_ == s)).max) 
    .toMap + ((Sort("time"), 1)) 

我試圖重現REPL裏面這種行爲用較短的例子,但也有它的行爲預期。變量sortsSeq[Sort]

error: type mismatch; 
found : <snip>.Sort 
required: (<snip>.Sort, Int) 
.toMap + (Sort("time"), 1) 

回答

7

是的,他們是必要的。否則,編譯器會將代碼解釋爲 x.+(y, z)而不是x.+((y, z))

相反,您可以再次使用ArrowAssoc:x + (y -> z)。注意,括號也是必需的,因爲+-具有相同的優先級(只有方法的第一個符號定義了它的優先級)。

0

是的,他們是需要的。他們使表達式成爲一個元組。圍繞逗號分隔列表的圓括號創建元組對象。例如,(1, 2, 3)是數字的三元組。

Map+方法接受一對 - 換句話說是兩個元素的元組。 Map將地圖中的條目表示爲(key,value)元組。

相關問題