【问题标题】:Scala: why do I have to put extra parenthesis here?Scala:为什么我必须在这里加上额外的括号?
【发布时间】:2011-05-13 15:03:47
【问题描述】:

真的需要围绕最终元组的括号吗?没有它们就无法编译,编译器尝试仅添加 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)

【问题讨论】:

    标签: scala compiler-errors


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      Map+ 方法接受一对 - 换句话说,两个元素的元组。 Map 将映射中的条目表示为(key,value) 元组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-12
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多