ruby - 在 ERB 模板中转义换行符/行尾

标签 ruby formatting erb macruby

我需要能够在不影响模板最终文本输出的情况下格式化 ERB 中未打印的逻辑行。在这一点上,我认为 ERB 不支持这种转义。

这是我的第一个主要 Ruby 项目。我正在编写代码生成器。我的模板将包含大量条件和枚举。为了使模板具有可读性和可维护性,我需要能够格式化逻辑代码和注释,而不会扭曲最终输出。

例如假设我想要这个输出:

Starting erbOutput
1
2
3
4
Ending erbOutput

我天真地写了这样的模板:

require 'erb'
h=<<H
Starting erbOutput
<%# comment %>
<%5.times do |e|%>
<%=e.to_s  %>
<%end %>
<%# comment %>
Ending erbOutput
H
s=ERB.new(h).result
puts s

...但这会产生

Starting erbOutput


0

1

2

3

4


Ending erbOutput

直接打印:

"Starting erbOutput\n\n\n0\n\n1\n\n2\n\n3\n\n4\n\n\nEnding erbOutput\n"

...清楚地表明逻辑和注释行的行返回包含在 ERB 输出中。

我可以通过将模板塞进这种尴尬的形式来产生所需的输出:

h=<<H
Starting erbOutput<%# comment %>
<%5.times do |e|%><%=e.to_s  %>
<%end %><%# comment %>Ending erbOutput
H

...但我认为如果没有更可读的格式,我就无法调试和维护模板。我的一些条件和枚举的深度多达三个级别,我对此进行了大量评论。将所有内容塞进一两行会使模板完全不可读。

有没有办法逃避或以其他方式抑制 ERB 中逻辑注释行的行返回?其他常用的 Ruby 模板模块是否能更好地处理这个问题?

以防万一,我在 MacOS 10.6.7 上使用 MacRuby 0.10(实现 Ruby 1.9.2)。

最佳答案

减号?

<%# comment -%>
<% 5.times do |e| -%>
<%= e.to_s  -%>
<% end -%>
<%# comment -%>

关于ruby - 在 ERB 模板中转义换行符/行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5969668/

相关文章:

ruby-on-rails - 逐步参与,持续的 guest 用户与 Devise

ruby-on-rails - 请求时生成 imagemagick/carrierwave 缩略图

dart - Dart:获取指定语言环境的货币代码

ruby-on-rails - 对于潜在的高流量站点,我应该使用 haml 还是 erb 或 erubis?

ruby - 如何避免使用 erb 模板中的引号生成内容?

php - 对于其他编程语言,Smalltalk 源代码浏览器会有多大用处?

ruby - 重构前置条件和后置条件

python - 带有 float 的格式字符串中的千位分隔符

html - html属性和值之间的空格?

html - 你能让 ERB 在渲染时正确缩进吗?