Secondo la Play 2.0 documentation, pattern matching può essere fatto in un modello in questo modo:pattern matching on object.member in Play 2,0 modelli
@connected match {
case models.Admin(name) => {
<span class="admin">Connected as admin (@name)</span>
}
case models.User(name) => {
<span>Connected as @name</span>
}
}
Il testo tra le parentesi dopo il caso viene trattato come espressioni di uscita (es. HTML), e questo è abbastanza conveniente.
Tuttavia, quando si tenta di usare un'espressione match che non è una variabile semplice, come object.member, in questo modo:
@album.year match {
case Some(y: Int) => { @y }
case None => { <b>nope</b> }
}
si traduce in un errore di compilazione: "')' expected but 'case' found."
Utilizzando defining
di impegnare l'espressione ad una variabile semplice, in questo modo:
@defining(album.year) { foo =>
@foo match {
case Some(y: Int) => { @y }
case None => { <b>nope</b> }
}
}
opere, ma sembra un po 'Cumb ersome.
Esiste un modo corretto per utilizzare questa funzione di corrispondenza del modello su espressioni che coinvolgono un oggetto e un membro (ad esempio album.year
)?
fa @ (partita album.year { caso Alcuni (y: Int) => {} @y caso Nessuno => {no}} ) o @ (album.year) partita { caso Alcuni (y: Int) => {@ y} caso Nessuno => {nope} } lavoro? – axaluss
No, nessuno di questi lavori. I primi risultati in "avvio previsto della definizione", e il secondo risultati nello stesso errore "')" previsto ... "come sopra. – kes
fa @ {album.year match {case Some (y: Int) => {@y} caso Nessuno => {nope}}} funziona? – axaluss