YesodBookから。
Hamletは、呼び出されると、スコープ内の変数に自動的にアクセスできます。に変数を具体的に渡す必要はありません。
この深い魔法は何ですか?どの変数がスコープ内にあるかを自動的に知るにはどうすればよいですか?
YesodBookから。
Hamletは、呼び出されると、スコープ内の変数に自動的にアクセスできます。に変数を具体的に渡す必要はありません。
この深い魔法は何ですか?どの変数がスコープ内にあるかを自動的に知るにはどうすればよいですか?
HamletはTemplateHaskellに基づいています; 特に、準クォーター(ie [hamlet| ... |]
)はインラインテンプレートに使用され、スプライス(ie $(hamletFile "foo")
)はファイルからテンプレートを作成するために使用されます。次に、テンプレートHaskellのイントロスペクション機能を使用して変数にアクセスします。
これには、変数への自動アクセスを許可する以外にも利点があります。
Hamletテンプレートはコンパイル時に通常のHaskellコードにコンパイルされるため、結果のテンプレートは実行時に解析および解釈されるテンプレートよりも効率的である可能性があります。
ファイルからテンプレートを読み取る場合、ファイルはコンパイル時に解析され、結果のバイナリに埋め込まれるため、実行時にテンプレートを同じ場所に保持する必要はなく、テンプレートの有効性は静的に保証されます。
これらの利点は、すべてのシェイクスピアファミリーのテンプレートに当てはまると思います。Haddockのドキュメントには、利用可能な準クォーターとスプライスに関する詳細情報があります。
これは、構文であるHaskellの準引用の機能です。[xxx| .... |]
準クォーターは、スコープ内にあるすべての変数にアクセスできるため、内挿することができます。補間の実際の実装(存在する場合)は、準クォーター自体に依存します。