我使用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
更改为List
或Seq
会使红色下划线消失,但我想使用可按键搜索的结构,其项目是有序的 - 独立。任何想法如何使模式匹配在定义块内的Scala Play Map上工作?
答案 0 :(得分:3)
答案 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
)。否则,它将返回一个空字符串,即不显示任何内容,这正是您所需要的。