我刚刚开始学习Twirl模板作为Play框架的一部分,我想知道是否有人能够更好地解释模板中多个参数组的语义。
我理解一组参数(通常是第一组?)是我自己提供的参数。我还注意到最后列出了任何隐式参数。
它是我教程案例(content: Html)
中的第二个参数组,我不知道它是如何使用的。
现在我想知道Twirl经历了部分应用参数的三个阶段:用户,内部和隐式。我可能会离开那里,有人让我直截了当!
答案 0 :(得分: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生成函数之前都会发生。把它想象成上面的语法糖。