0

Play フレームワークの一部としての Twirl テンプレートについて学び始めたばかりで、テンプレート内の複数のパラメーター グループのセマンティクスを誰かがよりよく説明できるかどうか疑問に思っていました。

パラメータの 1 つのセット (通常は最初のパラメータ?) は、自分で指定する必要があることを理解しています。また、暗黙的なパラメーターが最後にリストされていることにも気付きました。

これは、私のチュートリアルの場合(content: Html)、どのように使用されるかわかりませんが、2 番目のパラメーター グループです。

現在、その Twirl は部分的に適用されるパラメーターの 3 つの段階を経ていると考えています: ユーザー、内部、および暗黙的です。私はそれについてはかなりずれているかもしれませんが、誰かが私を正してくれました!

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

ご覧のとおり、結果は同じですが、2 番目のケースの呼び出し構文は「より適切」です。

通常、暗黙的なものは最後のグループに配置されます。これは、それらを指定する必要がまったくないためです。

views.html.fooしたがって、次のような見出し行を持つテンプレートを取得した場合:

@(title: String)(content: Html)

これは、次のような方法で簡単に呼び出すことができるようにするためです。

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

あなたが言った:

その Twirl は、パラメーターを部分的に適用する 3 つの段階 (ユーザー、内部、および暗黙) を経ていると考えています。私はそれについてはかなりずれているかもしれませんが、誰かが私を正してくれました!

はい、あなたはそれで道を外れています。:) 引数はグループで評価されますが、Twirl によって生成された関数の呼び出しが発生する前にすべて評価されます。上記のようなシンタックス シュガーと考えてください。

于 2014-10-24T20:56:49.907 に答える