在您的工作示例中,该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
请注意,Haml 并不总是不允许end
关键字,只有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
or {}
,但额外的复杂性可能不值得。这种方式更适合do...end
用于多行块和{}
单行块的常见 Ruby 习惯用法。
如果{}
由于运算符优先级的某些问题而需要使用它可能是创建辅助方法的标志。您的 Haml 模板(或任何语言的模板)不是复杂逻辑的最佳位置,最好将其移动到真正的 Ruby 文件中。