Sections
|
<( レンダリングとスコープ )>
DML2タグを使えば, タグを(<(someTag)>のように)呼びだせば, タグの定義により(解釈された)コードが挿入されます. オブジェクトとメンバーも同じようにして参照することができます. <(someDate.month)>のようにして値を呼びだすと, (DML2エレメントを解釈して)属性のテキストを返します.
さて, オブジェクト全体を参照したときには一体何が起こるのでしょうか. ここでレンダー定義の出番です. レンダー定義とは, たとえば<(someDate)>のようにタイプした場合にに何を返すかを定義したものです. renderに続いて空白, オブジェクト型, 空白, そして開く括弧({)をタイプすることで定義することができます. タグ定義と同じです.
render Date { Date: <(month)> <(day)>, <(year)> }
|
<(someDate.day)>などの参照が一切ない点に注意しましょう. DML2にはスコープがあるためです. たとえばDateオブジェクト内では, メンバーがローカルであるため, Dateのメンバーにアクセスすることができます. しかし, Dateに含まれるTimeメンバーにアクセスしたい場合には, <(timestamp.second)>のようにタイプする必要があります(Timeメンバーはローカルではないからです).
レンダー定義に戻ります. <(someDate)>とタイプするとき, 上記で定義したテキストがインスタンスのメンバーを使ってその場所に挿入されます. これはsomeDateがDate型だからです.
|
|