7

Theo Play 2.0 documentation, khớp mẫu có thể được thực hiện trong một mẫu như vậy:mẫu phù hợp trên object.member trong Chơi 2.0 mẫu

@connected match { 

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

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

Các văn bản giữa các dấu ngoặc sau khi biểu trường hợp được coi là đầu ra (ví dụ HTML) và điều này khá thuận tiện.

Tuy nhiên, khi cố gắng sử dụng một biểu thức trận đấu đó không phải là một biến đơn giản, chẳng hạn như object.member, như thế này:

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

nó kết quả trong một lỗi biên dịch: "')' expected but 'case' found."

Sử dụng defining để ràng buộc biểu thức thành một biến đơn giản, như sau:

hoạt động, nhưng có vẻ như hơi câm ersome.

Có cách nào phù hợp để sử dụng tính năng đối sánh mẫu này trên các biểu thức liên quan đến đối tượng và thành viên (ví dụ: album.year) không?

+0

không @ (trận đấu album.year { trường hợp Một số (y: Int) => {} @y trường hợp None => {nope} }) hoặc @ (album.year) phù hợp { trường hợp Một số (y: Int) => {@ y} trường hợp Không có => {nope} } hoạt động? – axaluss

+0

Không, không phải công việc này. Các kết quả đầu tiên trong "bắt đầu dự kiến ​​của định nghĩa", và kết quả thứ hai trong cùng một "')' dự kiến ​​..." lỗi như trên. – kes

+0

hiện @ {album.year match {case Một số (y: Int) => {@y} case None => {nope}}} hoạt động? – axaluss

Trả lời

0

Bạn đã thử thực hiện việc này chưa?

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

Không chắc chắn nếu nó đơn giản như vậy, nhưng nó sẽ hoạt động. Xem https://github.com/playframework/Play20/blob/master/samples/scala/computer-database/app/views/list.scala.html#L64

+0

Tôi biết đó là một cách thay thế có thể giải quyết ví dụ đơn giản xuất hiện trong câu hỏi của tôi ... tuy nhiên, ví dụ đó chỉ để minh họa sự cố, tức là mẫu khớp trong Play không hoạt động hoàn toàn hoặc không hoạt động như mong đợi. – kes

2

Bạn đã thử cái này chưa?

@album.year match { 

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

Xem ở đây cho một ví dụ: https://github.com/bjartek/computer-database-mongo/blob/matchtest/app/views/list.scala.html#L67

Dường như khoảng trắng là rất quan trọng để nhận được ngay khi làm điều này trong mẫu

+0

OK, chỉ cần thử nó với khoảng trắng được điều chỉnh. Nó vẫn không hoạt động.Sự khác biệt giữa ví dụ và của bạn là biểu thức đối sánh của bạn là một số nhận dạng đơn giản (@company) và của tôi là @ object.member. – kes

Các vấn đề liên quan