播放框架Scala模板
我使用Play Framework已经有一段时间了,但我对Scala模板几乎是新手 . 作为一名熟悉C语言的开发人员,有时这看起来有点奇怪 我想知道这里是否有人能帮我更好地理解这段代码,我是从这里得到的 (任务示例) 如果有人能更详细地向我解释这三条线到底在做什么,我将不胜感激播放框架Scala模板,scala,templates,playframework,playframework-2.0,Scala,Templates,Playframework,Playframework 2.0,我使用Play Framework已经有一段时间了,但我对Scala模板几乎是新手 . 作为一名熟悉C语言的开发人员,有时这看起来有点奇怪 我想知道这里是否有人能帮我更好地理解这段代码,我是从这里得到的 (任务示例) 如果有人能更详细地向我解释这三条线到底在做什么,我将不胜感激 谢谢大家我不认为这些是特定于播放模板的,而是惯用的函数Scala的示例。中间一行使用模式匹配和匿名函数,这一点在下面的部分中得到了很好的介绍。另外两个是在将函数本身作为参数的集合上调用函数。这些被称为“高阶函数”,是函数
谢谢大家我不认为这些是特定于播放模板的,而是惯用的函数Scala的示例。中间一行使用模式匹配和匿名函数,这一点在下面的部分中得到了很好的介绍。另外两个是在将函数本身作为参数的集合上调用函数。这些被称为“高阶函数”,是函数编程的关键工具之一。map尤其是FP的关键。丹尼尔·斯皮瓦克(Daniel Spiewak)的系列是一个很好的开始学习这类函数的地方。好的,这里有几个转换
@todoTasks.groupBy(u.project)
表示todoTask有一个名为project
的字段,我们应该将该todoTask列表转换为一个映射,其中项目是键,值都是与键匹配的todoTask
.map{case(project,tasks)=>{
表示我们现在有了一个map,其中键是project
,值是任务的列表。如果我们有这两个项(project,tasks),那么我们应该对每个任务做些什么,接下来的是=/code>
提示:作为一名java play开发人员,您不需要对scala有深入的了解,只需在java控制器中对数据进行转换即可。感谢Alex的回复,这就是我到目前为止一直在做的,在控制器中使用java进行转换。我在想,对scala有更深入的了解可能会更好@Siavash,如果您打算使用play进行认真的开发,我真的认为学习Scala是值得的in-Playframework是用Scala编写的。其次,使用Scala版本,你会发现你的代码更紧凑,更具表现力。我会看一看Coursera Scala课程,它非常好。它刚刚启动,所以你不会错过你现在开始的任何东西
@(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>
}
@todoTasks.groupBy(_.project).map {
case (project, tasks) => {
@tasks.map { task =>