Сопоставление шаблонов для object.member в шаблонах Play 2.0

Согласно документации Play 2.0сопоставление с образцом может выполняться в шаблоне следующим образом:

@connected match {

  case models.Admin(name) => {
    Connected as admin (@name)
  }

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

Текст в квадратных скобках после case-выражений воспринимается как вывод (например, HTML), и это довольно удобно.

Однако при попытке использовать выражение соответствия, которое не является простой переменной, такой как object.member, например:

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

это приводит к ошибке компиляции: "')' ожидалось, но найдено "дело".

Использование определениядля привязки выражения к простой переменной, например:

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

работает, но кажется немного громоздким.

Есть ли правильный способ использовать эту функцию сопоставления с образцом для выражений, которые включают объект и элемент (например, album.year)?

7
задан i.am.michiel 13 May 2012 в 10:50
поделиться