Scala: почему я должен поставить дополнительные скобки здесь? - PullRequest
1 голос
/ 13 мая 2011

Действительно ли нужны скобки вокруг финального кортежа? Он не компилируется без них, и компилятор пытается добавить только Sort («время») и жалуется, что вместо этого ожидает кортеж.

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)

Ответы [ 2 ]

7 голосов
/ 13 мая 2011

Да, они нужны.В противном случае компилятор будет интерпретировать код как x.+(y, z) вместо x.+((y, z)).

Вместо этого вы можете снова использовать ArrowAssoc: x + (y -> z).Обратите внимание, скобки также необходимы, потому что + и - имеют одинаковый приоритет (только первый знак метода определяет его приоритет).

0 голосов
/ 13 мая 2011

Да, они нужны.Они делают выражение кортежем.Скобки, окружающие разделенный запятыми список, создают объекты кортежа.Например, (1, 2, 3) - это набор из трех чисел.

Map * + принимает пару - другими словами, кортеж из двух элементов.Карта представляет записи на карте в виде (key,value) кортежей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...