7

Play 2.0のドキュメント によると、パターン マッチングは次のようにテンプレートで実行できます。

@connected match {

  case models.Admin(name) => {
    <span class="admin">Connected as admin (@name)</span>
  }

  case models.User(name) => {
    <span>Connected as @name</span>
  }   
}

case 式の後の括弧内のテキストは出力 (HTML など) として扱われ、これは非常に便利です。

ただし、次のように、object.member などの単純な変数ではない一致式を使用しようとすると、次のようになります。

@album.year match {
   case Some(y: Int) => { @y }
   case None => { <b>nope</b> }
}

コンパイル エラーが発生します。 "')' expected but 'case' found."

defining次のように、式を単純な変数にバインドするために使用します。

@defining(album.year) { foo =>
  @foo match {
        case Some(y: Int) => { @y }
        case None => { <b>nope</b> }
      }
  }

動作しますが、少し面倒です。

オブジェクトとメンバーを含む式 (例: album.year) でこのパターン マッチング機能を使用する適切な方法はありますか?

4

3 に答える 3

2

これを試しましたか?

@album.year match {

   case Some(y: Int) => {
     @y 
   }
   case None => { 
     <b>nope</b> 
   }
}

例については、こちらをご覧ください:https ://github.com/bjartek/computer-database-mongo/blob/matchtest/app/views/list.scala.html#L67

テンプレートでこれを行う場合、空白を正しく設定することが非常に重要であるように見えます

于 2012-05-15T12:20:21.467 に答える
1

確認済みのバグであるため、現在 (バージョン 2.0.1 では) 不可能です。

https://play.lighthouseapp.com/projects/82401/tickets/46-support-more-complex-match-statement

于 2012-05-15T23:19:20.153 に答える
0

これだけやってみましたか?

@album.year.getOrElse("<b>None</b>");

それがそれほど単純かどうかはわかりませんが、うまくいくはずです。https://github.com/playframework/Play20/blob/master/samples/scala/computer-database/app/views/list.scala.html#L64を参照してください。

于 2012-05-13T20:21:27.983 に答える