0

私は Play と Scala を使用していますが、これを理解できないようです。
私のコントローラーには、同じキーで異なる値を持つ 2 つのマップがあります。次に、ビューで最初のマップを反復処理し、キー (イテレータから取得) を使用して 2 番目のマップを検索しようとします。私がこれをするとき

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

コンパイルされません。次のエラーメッセージが表示されます:「単純な式の不正な開始」(2番目の@f._1を指しています)。
2 番目の @f._1 を定数に置き換えると問題なく動作するため、ネストされた @ が問題の原因であることは明らかです。

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

これらの 2 つの @ をネストできるかどうかは誰にもわかりませんか? いろいろ試してみましたが (ダブル @、ダブル クォーテーション)、解決しませんでしたか?

4

2 に答える 2

1

mapifIn Play は単純な Scala ではありません。これは特別なテンプレート構造です。内部{}では、ネストされた @ 式を含む任意の html コードを使用できます。

反対に — @ 式はほとんどが Scala です ( maps とifs、flatMaps、およびその他のfor内包表記を除く)。

Play のテンプレート エンジン ( http://www.playframework.com/documentation/2.0.1/ScalaTemplates ) をご覧ください。

あなたの場合、 s とs の@map2.getOrElse(f._1, "default value")ない単純な Scala 式です。したがって、ここでは @ は必要ありません。ifmap

于 2013-11-11T19:18:32.430 に答える
1

次のように「@」を使用せずに試してください。

@map1.map { f =>
<span>Key: @f._1</span>
<span>Value from second map: @map2.getOrElse(f._1, "default value")
}
于 2013-11-11T19:12:53.140 に答える