斯卡拉玩;地图上的模式匹配;无法解析 Map.unapply
Scala play; pattern matching on Map; cannot resolve Map.unapply
我使用 scala play 框架并有这个简单的模板:
@defining({
Map("a" -> 1, "b" -> 2)
}) { case Map("a" -> aValue, *) =>
<div>
this is a value: @a
</div>
}
IntelliJ Idea 在 case Map(...
中下划线 Map
,表示它 "Cannot resolve method Map.unapply" 并且它还 "Cannot resolve symbol Map".
将实现从 Map
更改为 List
或 Seq
会使红色下划线消失,但我想使用可按键搜索的结构,其项目是顺序无关。任何想法如何使模式匹配在定义块内使用 Scala Play 在 Map 上工作?
根据API docs Map
does not have unapplySeq
method and thus cannot be pattern matched out-of-the-box. You could try adding your own as suggested here。
看来您要做的只是显示地图中存在的值。
如果你有这样的地图:
val myMap = Map("a" -> 1, "b" -> 2)
您可以像这样在播放模板中使用它:
@myMap.get("a").map { aValue =>
<div>this is a value: @aValue</div>
}
myMap.get("a")
return 一个 Option
。在这种情况下它将 return Some(1)
,而如果未定义给定键的值,它将 return None
。
当您在模板中的 Option
上调用 .map
时,它将 return 您传递给 .map
的表达式的结果值,如果 Option
不为空(不是 None
)。否则,它将 return 一个空字符串,即不显示任何内容,这正是您所需要的。
我使用 scala play 框架并有这个简单的模板:
@defining({
Map("a" -> 1, "b" -> 2)
}) { case Map("a" -> aValue, *) =>
<div>
this is a value: @a
</div>
}
IntelliJ Idea 在 case Map(...
中下划线 Map
,表示它 "Cannot resolve method Map.unapply" 并且它还 "Cannot resolve symbol Map".
将实现从 Map
更改为 List
或 Seq
会使红色下划线消失,但我想使用可按键搜索的结构,其项目是顺序无关。任何想法如何使模式匹配在定义块内使用 Scala Play 在 Map 上工作?
根据API docs Map
does not have unapplySeq
method and thus cannot be pattern matched out-of-the-box. You could try adding your own as suggested here。
看来您要做的只是显示地图中存在的值。
如果你有这样的地图:
val myMap = Map("a" -> 1, "b" -> 2)
您可以像这样在播放模板中使用它:
@myMap.get("a").map { aValue =>
<div>this is a value: @aValue</div>
}
myMap.get("a")
return 一个 Option
。在这种情况下它将 return Some(1)
,而如果未定义给定键的值,它将 return None
。
当您在模板中的 Option
上调用 .map
时,它将 return 您传递给 .map
的表达式的结果值,如果 Option
不为空(不是 None
)。否则,它将 return 一个空字符串,即不显示任何内容,这正是您所需要的。