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
ご覧のとおり、結果は同じですが、2 番目のケースの呼び出し構文は「より適切」です。
通常、暗黙的なものは最後のグループに配置されます。これは、それらを指定する必要がまったくないためです。
views.html.foo
したがって、次のような見出し行を持つテンプレートを取得した場合:
@(title: String)(content: Html)
これは、次のような方法で簡単に呼び出すことができるようにするためです。
Ok(views.html.foo("Title") { /* generate some html */ } )
あなたが言った:
その Twirl は、パラメーターを部分的に適用する 3 つの段階 (ユーザー、内部、および暗黙) を経ていると考えています。私はそれについてはかなりずれているかもしれませんが、誰かが私を正してくれました!
はい、あなたはそれで道を外れています。:) 引数はグループで評価されますが、Twirl によって生成された関数の呼び出しが発生する前にすべて評価されます。上記のようなシンタックス シュガーと考えてください。