Playframework 旋转模板中的多个参数组

Playframework 旋转模板中的多个参数组,playframework,twirl,Playframework,Twirl,我刚刚开始学习Twirl模板作为Play框架的一部分,我想知道是否有人能够更好地解释模板中多个参数组的语义 我知道一组参数(通常是第一组?)是我自己提供的参数。我还注意到,所有隐式参数都列在最后 这是第二个参数组,在我的教程中是(内容:Html),我不确定它是如何使用的 现在我正在计算,旋转要经过三个部分应用参数的阶段:用户、内部和隐式。但我可能会偏离这一点,有人让我直截了当 回想一下,Twirl模板编译为Scala函数。Scala函数可以有多个参数组,因此Twirl模板也可以。实际上,这只是语

我刚刚开始学习Twirl模板作为Play框架的一部分,我想知道是否有人能够更好地解释模板中多个参数组的语义

我知道一组参数(通常是第一组?)是我自己提供的参数。我还注意到,所有隐式参数都列在最后

这是第二个参数组,在我的教程中是
(内容:Html)
,我不确定它是如何使用的


现在我正在计算,旋转要经过三个部分应用参数的阶段:用户、内部和隐式。但我可能会偏离这一点,有人让我直截了当

回想一下,Twirl模板编译为Scala函数。Scala函数可以有多个参数组,因此Twirl模板也可以。实际上,这只是语法上的甜点,可以让匿名函数更容易接受传递参数。例如:

scala> def foo(a:String, b: () => String) = { a + b() }
foo: (a: String, b: () => String)String

scala> foo("hello", { () => " there" } )
res2: String = hello there

scala> def foo(a:String)( b: () => String) = { a + b() }
foo: (a: String)(b: () => String)String

scala> foo("hello") { () => " there" }
res3: String = hello there
如您所见,结果是相同的,但第二种情况下的调用语法“更好”

通常隐式表达式放在最后一个组中,因为这样就根本不需要指定它们

因此,如果您有一个模板
views.html.foo
,其标题行如下:

@(title: String)(content: Html)
这只是让您可以更轻松地使用以下内容调用它:

Ok(views.html.foo("Title") { /* generate some html */ } )
你说:

我想,旋转要经过三个阶段,部分应用参数:用户、内部和隐式。但我可能会偏离这一点,有人让我直截了当

是的,你做得太离谱了。:)参数是按组计算的,但都是在调用Twirl生成的函数之前计算的。把它想象成上面提到的语法糖