Scala:为什么我必须在这里添加额外的括号?

时间:2011-05-13 15:03:48

标签: scala compiler-errors

最终元组周围的括号是否真的需要?没有它们就不编译,编译器只尝试添加Sort(“time”)并抱怨它需要一个元组。

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)

2 个答案:

答案 0 :(得分:7)

是的,他们是必需的。否则编译器会将代码解释为 x.+(y, z)代替x.+((y, z))

相反,您可以再次使用ArrowAssoc:x + (y -> z)。请注意,还需要括号,因为+-具有相同的优先级(只有方法的第一个符号定义其优先级)。

答案 1 :(得分:0)

是的,他们是需要的。他们使表达成为一个元组。围绕以逗号分隔的列表的括号创建元组对象。例如,(1, 2, 3)是一个3元组的数字。

Map的{​​{1}}方法接受一对 - 换句话说,是两个元素的元组。 Map将地图中的条目表示为+元组。