Scalaz Map[String, Int] «суммирование» и сгибЛевый не работает

StackOverflow https://stackoverflow.com//questions/20020101

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня есть следующая функция, используя Scalaz |+| оператор:

  def sumGames(games: List[Map[String, Int]]) =
    games.foldLeft(_ |+| _)

Добавление двух карт вручную работает безупречно (а:Карта [String, int) |+| B:Map[String, Int]), но объявление указанной выше функции приводит к 3 ошибкам:

<console>:20: error: missing parameter type for expanded function ((x$1, x$2) =>
 x$1.$bar$plus$bar(x$2))
           games.foldLeft(_ |+| _)
                          ^
<console>:20: error: missing parameter type for expanded function ((x$1: <error>
, x$2) => x$1.$bar$plus$bar(x$2))
           games.foldLeft(_ |+| _)
                                ^
<console>:20: error: missing arguments for method foldLeft in trait LinearSeqOpt
imized;
follow this method with `_' if you want to treat it as a partially applied funct
ion
           games.foldLeft(_ |+| _)

Почему это не работает и как это исправить?

Это было полезно?

Решение

Взгляните на foldLeft API, он принимает два списка аргументов.Первое — это начальное значение кратности, второе — уменьшающая функция.

Я думаю, ты, наверное, хочешь

import scalaz._
import Scalaz._

def sumGames(games: List[Map[String, Int]]) = 
  games.foldLeft(Map.empty[String, Int])(_ |+| _)

Если вы знаете, что ваш список не пуст, вы также можете использовать games.reduce(_ |+| _).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top