与Scala一起玩:如何嵌套特殊字符

时间:2013-11-11 19:02:28

标签: scala playframework

我正在与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个@?我尝试了各种各样的东西(双@,双引号),但这没有帮助?

2 个答案:

答案 0 :(得分:1)

尝试不使用“@”,如下所示:

@map1.map { f =>
<span>Key: @f._1</span>
<span>Value from second map: @map2.getOrElse(f._1, "default value")
}

答案 1 :(得分:1)

Play中的

mapif不是简单的Scala。这是一种特殊的模板结构。在{}内,您可以使用任何html代码,包括嵌套的@ -expressions。

相反 - @ -expressions主要是Scala(不包括mapif s,flatMap s以及其他for - 理解。

看一下Play的模板引擎(http://www.playframework.com/documentation/2.0.1/ScalaTemplates)。

在您的情况下,@map2.getOrElse(f._1, "default value")是一个简单的Scala表达式,没有ifmap s。所以这里不需要@。