[英]Play Framework Scala Template
我已經使用Play Framework了一段時間,但我幾乎是Scala模板的新手。 對於我來說,作為C熟悉的語言開發人員,有時看起來有點奇怪
我想知道是否有人在這里可以幫助我更好地理解這些代碼我從http://www.playframework.com/documentation/2.2.x/JavaGuide3(Zentask示例)中獲取了它
@(projects: List[Project], todoTasks: List[Task])
@main("Welcome to Play") {
<header>
<hgroup>
<h1>Dashboard</h1>
<h2>Tasks over all projects</h2>
</hgroup>
</header>
<article class="tasks">
@todoTasks.groupBy(_.project).map {
case (project, tasks) => {
<div class="folder" data-folder-id="@project.id">
<header>
<h3>@project.name</h3>
</header>
<ul class="list">
@tasks.map { task =>
<li data-task-id="@task.id">
<h4>@task.title</h4>
@if(task.dueDate != null) {
<time datetime="@task.dueDate">
@task.dueDate.format("MMM dd yyyy")</time>
}
@if(task.assignedTo != null && task.assignedTo.email != null) {
<span class="assignedTo">@task.assignedTo.email</span>
}
</li>
}
</ul>
</div>
}
}
</article>
}
這3行對我來說真的很困惑:
@todoTasks.groupBy(_.project).map {
case (project, tasks) => {
@tasks.map { task =>
如果有人能夠更詳細地向我解釋這3條線路到底在做什么,我真的很感激嗎?
多謝你們
好的,所以這里有幾個轉換。
@todoTasks.groupBy(_.project)
說todoTask有一個名為project
的字段,我們應該將todoTasks列表轉換為一個Map,其中項目是鍵,而值都是與鍵匹配的todoTasks。
.map { case (project, tasks) => {
表示我們現在有一個Map,其中鍵是project
,值是一個tasks
列表。 如果我們有這兩個項目(項目,任務),那么我們應該對每個任務做一些事情,接下來的是=>
提示,作為一名java play開發人員,您不需要深入了解scala,只需在java控制器中進行數據轉換即可。
我認為這些都不是Play模板特有的,而是慣用的功能Scala的例子。 中間行使用模式匹配與匿名函數, 本教程非常清楚地介紹了它 。 另外兩個是在集合上調用函數,它們將函數本身作為參數。 這些被稱為“高階函數”,是函數式編程的關鍵工具之一。 特別是.map是FP的關鍵。 Daniel Spiewak的Scala Collections For Easyily Bored系列是開始使用這些功能的好地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.