7

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)?

+0

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

+0

No, nessuno di questi lavori. I primi risultati in "avvio previsto della definizione", e il secondo risultati nello stesso errore "')" previsto ... "come sopra. – kes

+0

fa @ {album.year match {case Some (y: Int) => {@y} caso Nessuno => {nope}}} funziona? – axaluss

risposta

0

Hai provato a farlo?

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

Non sono sicuro se sia così semplice, ma dovrebbe funzionare. Vedi https://github.com/playframework/Play20/blob/master/samples/scala/computer-database/app/views/list.scala.html#L64

+0

So che è un possibile modo alternativo per risolvere il semplice esempio che appare nella mia domanda ... tuttavia, quell'esempio era solo per dimostrare il problema, cioè la corrispondenza del pattern in Play non funziona o non funziona come previsto. – kes

2

Hai provato questo?

@album.year match { 

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

Vedi qui per un esempio: https://github.com/bjartek/computer-database-mongo/blob/matchtest/app/views/list.scala.html#L67

Sembra spazio bianco è molto importante per ottenere il diritto quando si fa questo nel modello

+0

OK, ho appena provato con lo spazio bianco regolato. Ancora non funziona.La differenza tra il tuo esempio e il mio è che la tua espressione di corrispondenza è un semplice identificatore (@company) e il mio è @ object.member. – kes