我正在与Play和Scala合作,似乎无法弄清楚这一个 在我的控制器中,我有2个具有相同键但不同值的地图。然后,在视图上,我迭代第一个映射并尝试使用密钥(来自迭代器)对第二个映射进行查找。当我这样做时
@map1.map { f =>
<span>Key: @f._1</span>
<span>Value from second map: @map2.getOrElse(@f._1, "default value")
}
它无法编译。它抱怨以下错误消息:“非法启动简单表达”(指向第二个@ f._1) 很明显,嵌套的@是导致问题的原因,因为如果我用常量替换第二个@ f._1,它就可以正常工作。
@map1.map { f =>
<span>Key: @f._1</span>
<span>Value from second map: @map2.getOrElse("my known key", "default value")
}
有人知道是否可以嵌套这2个@?我尝试了各种各样的东西(双@,双引号),但这没有帮助?
答案 0 :(得分:1)
尝试不使用“@”,如下所示:
@map1.map { f =>
<span>Key: @f._1</span>
<span>Value from second map: @map2.getOrElse(f._1, "default value")
}
答案 1 :(得分:1)
map
和if
不是简单的Scala。这是一种特殊的模板结构。在{}
内,您可以使用任何html代码,包括嵌套的@ -expressions。
相反 - @ -expressions主要是Scala(不包括map
和if
s,flatMap
s以及其他for
- 理解。
看一下Play的模板引擎(http://www.playframework.com/documentation/2.0.1/ScalaTemplates)。
在您的情况下,@map2.getOrElse(f._1, "default value")
是一个简单的Scala表达式,没有if
和map
s。所以这里不需要@。