作業例では、end行は生のテキストとして扱われ、出力に含まれます。endこれは、事実上キーワードがないために機能します。この行を次のように変更する- endと(つまり、ハイフンを追加する(そして、インデントが正しいことを確認する))、次のようなエラーが表示されます。
Syntax error on line 9: You don't need to use "- end" in Haml. Un-indent to close a block:
- if foo?
%strong Foo!
- else
Not foo.
%p This line is un-indented, so it isn't part of the "if" block
endHamlがキーワードを常に禁止しているわけではなくend、それ自体だけであることに注意してください。これらは、ステートメント修飾子とともに使用できます。例:
- @things.each do |thing|
%p= thing.to_s
-end unless @dont_show_things
または、ブロックの結果を利用したい場合:
= @things.map do |thing|
- do_something_with(thing)
-end.join(",")
使用に関しては{}、できません。HamlがテンプレートをRubyにコンパイルすると、必要に応じてブロックを閉じるためにハードコードされた文字列endが追加されます。を使用できるようにHamlを変更することは可能かもしれdo..endませ{}んが、余分な複雑さはおそらくそれだけの価値はありません。do...endこの方法は、複数行のブロックや{}単一行のブロックに使用する一般的なRubyのイディオムに適しています。
{}演算子の優先順位に関する問題のために使用する必要がある場合は、ヘルパーメソッドを作成するための兆候である可能性があります。Hamlテンプレート(または任意の言語のテンプレート)は、複雑なロジックに最適な場所ではありません。実際のRubyファイルに移動するのが最適です。