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

zig*_*tar 1 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))
Run Code Online (Sandbox Code Playgroud)

我试图用一个较短的例子在REPL中重现这种行为,但它的行为与预期的一样.变量sorts是a Seq[Sort].

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

kir*_*uku 7

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

相反,你可以再次使用ArrowAssoc : x + (y -> z). 通知,还需要括号因为+-具有相同的优先级(仅一个方法的第一个迹象定义其优先级).