Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
播放框架Scala模板_Scala_Templates_Playframework_Playframework 2.0 - Fatal编程技术网

播放框架Scala模板

播放框架Scala模板,scala,templates,playframework,playframework-2.0,Scala,Templates,Playframework,Playframework 2.0,我使用Play Framework已经有一段时间了,但我对Scala模板几乎是新手 . 作为一名熟悉C语言的开发人员,有时这看起来有点奇怪 我想知道这里是否有人能帮我更好地理解这段代码,我是从这里得到的 (任务示例) 如果有人能更详细地向我解释这三条线到底在做什么,我将不胜感激 谢谢大家我不认为这些是特定于播放模板的,而是惯用的函数Scala的示例。中间一行使用模式匹配和匿名函数,这一点在下面的部分中得到了很好的介绍。另外两个是在将函数本身作为参数的集合上调用函数。这些被称为“高阶函数”,是函数

我使用Play Framework已经有一段时间了,但我对Scala模板几乎是新手 . 作为一名熟悉C语言的开发人员,有时这看起来有点奇怪

我想知道这里是否有人能帮我更好地理解这段代码,我是从这里得到的 (任务示例)

如果有人能更详细地向我解释这三条线到底在做什么,我将不胜感激


谢谢大家

我不认为这些是特定于播放模板的,而是惯用的函数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 =>