Игра Scala;сопоставление с образцом на карте;не удается разрешить Map.unapply - PullRequest
0 голосов
/ 08 июня 2018

Я использую фреймворк Scala и у меня есть простой шаблон:

@defining({
    Map("a" -> 1, "b" -> 2)
}) { case Map("a" -> aValue, *) =>
    <div>
        this is a value: @a
    </div>
}

IntelliJ Idea подчеркивает Map в case Map(..., говоря, что он «не может разрешить метод Map.unapply» и что он также »Не удается разрешить символ «Карта».

Изменение реализации с Map на List или Seq приводит к удалению красного подчеркивания, но я хотел бы использовать структуру, доступную для поиска по ключу и его элементам.не зависят от порядка.Любые идеи, как заставить сопоставление с образцом работать на карте с Scala Play внутри определяющего блока?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Похоже, все, что вы пытаетесь сделать, это показать значение, если оно присутствует на карте.

При условии, что у вас есть такая карта:

val myMap = Map("a" -> 1, "b" -> 2)

Вы можете использовать еев шаблоне игры, подобном этому:

@myMap.get("a").map { aValue =>
  <div>this is a value: @aValue</div>
}

myMap.get("a") возвращает Option.В этом случае он вернет Some(1), тогда как он вернет None, если значение для данного ключа не было определено.

Когда вы вызываете .map для Option в шаблоне,он вернет результирующее значение выражения, которое вы передали .map, если Option не пусто (не None).В противном случае он вернет пустую строку, то есть не покажет ничего, а именно то, что вам нужно.

0 голосов
/ 08 июня 2018

Согласно API-документам Map не имеет метода unapplySeq и, следовательно, не может быть сопоставлено с шаблоном из коробки.Вы можете попробовать добавить свой собственный, как предложено здесь .

...