最终元组周围的括号是否真的需要?没有它们就不编译,编译器只尝试添加Sort(“time”)并抱怨它需要一个元组。
val maxSortCounts: Map[Sort, Int] =
sorts.map(s => s -> usedPredicates.map(pred => pred.signature.count(_ == s)).max)
.toMap + ((Sort("time"), 1))
我试图用一个较短的例子在REPL中重现这种行为,但它的行为与预期的一样。变量sorts
是Seq[Sort]
。
error: type mismatch;
found : <snip>.Sort
required: (<snip>.Sort, Int)
.toMap + (Sort("time"), 1)
答案 0 :(得分:7)
是的,他们是必需的。否则编译器会将代码解释为
x.+(y, z)
代替x.+((y, z))
。
相反,您可以再次使用ArrowAssoc:x + (y -> z)
。请注意,还需要括号,因为+
和-
具有相同的优先级(只有方法的第一个符号定义其优先级)。
答案 1 :(得分:0)
是的,他们是需要的。他们使表达成为一个元组。围绕以逗号分隔的列表的括号创建元组对象。例如,(1, 2, 3)
是一个3元组的数字。
Map
的{{1}}方法接受一对 - 换句话说,是两个元素的元组。 Map将地图中的条目表示为+
元组。