0

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

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

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

现在,我认为 Twirl 经历了部分应用参数的三个阶段:用户、内部和隐式。不过,我可能会走得很远,有人让我直截了当!

4

1 回答 1

1

回想一下,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 经历了部分应用参数的三个阶段:用户、内部和隐式。不过,我可能会走得很远,有人让我直截了当!

是的,你在这方面做得很差。:) 参数是分组评估的,但都是在调用 Twirl 生成的函数之前发生的。只需将其视为上面的语法糖。

于 2014-10-24T20:56:49.907 回答