斯卡拉戏;地图上的模式匹配;无法解析Map.unapply

时间:2018-06-08 11:02:34

标签: scala playframework-2.3

我使用scala play框架并拥有这个简单的模板:

@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更改为ListSeq会使红色下划线消失,但我想使用可按键搜索的结构,其项目是有序的 - 独立。任何想法如何使模式匹配在定义块内的Scala Play Map上工作?

2 个答案:

答案 0 :(得分:3)

根据API docs Map没有unapplySeq方法,因此无法与开箱即用的模式匹配。您可以尝试按建议添加自己的here

答案 1 :(得分:1)

看起来你要做的就是显示一个值,如果它存在于地图中。

如果您有这样的地图:

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)。否则,它将返回一个空字符串,即不显示任何内容,这正是您所需要的。