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

标签 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)

最佳答案

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

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

关于Scala:为什么我必须在这里加上额外的括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5993879/

相关文章:

Scala 编译器错误 : assertion failed: scala. <无>

scala - sbt 无法从本地存储库解析插件

scala - 如何将已知的结构化 RDD 转换为 Vector

arrays - 如何将整个数组附加到 Scala 中的数组?

excel - 编译错误-更新数据透视时期望的数组

c++ - 当{}与new一起使用以创建std::array<T, n>时,将绕过T的默认构造函数

c# - 编译时错误 父类(super class)型集合引用所引用的子类型集合对象

java - 如何从 Cassandra 表中检索数据类型为 "list"的列?

c - 如何在函数中打印 void * 以及如何在函数中访问 void * 变量?

java - 如何在Java中修复它