私は Scalate (具体的には scaml ですが、形式はあまり重要ではありません) を使用しており、多数のテンプレートで定義された多数の値を持っています。 これらの変数は、コンパイル時に常に認識されるわけではありません。 私の目的は、他のテンプレートの一部として含める単一の共有テンプレートでそれらを定義することです (一種のテンプレート継承)。また、これらの値を遅延インスタンス化したいと考えています。だから私が欲しいのは次のようなものです:
globals.scaml:
- import mylib.DataProvider._
- lazy val name = get("name")
- lazy val address = get("address)
template.scaml:
= include("globals.scaml")
The address for #{name} is #{address}
次のように、いくつかの変数を渡しながら globals.scaml が正しいテンプレートをロードするように、これを逆にするなど、さまざまなスキームをいじりました。
globals.scaml:
-@ val template: String
- import mylib.DataProvider._
- val data = Map("name" -> get("name"), "address" -> get("address))
- render(template, data)
しかし、これは、次のように、テンプレートでも val を実際に宣言した場合にのみ機能します。
-@ val name:String
-@ val address:String
The address for #{name} is #{address}
問題は、すべての vals を宣言する必要があり、遅延評価が得られないため、これは実際にはすべてのテンプレートで自分自身を繰り返すよりも悪いことです。
Scalate でこれを行う (独自のプリパーサーを作成せずに) 方法はありますか?