ERB在每个行循环的末尾打印整个字符串

时间:2011-12-14 15:34:18

标签: ruby-on-rails erb

这让我困惑了一段时间。我试图在erb中循环遍历文本行,并且在循环完成时打印整行文本。

<% "some\nmultiline\ntext".each_line do |line| %>
  <%= line %> <br />
<% end %>

输出:

some 
multiline 
text 
some multiline text

同样如此:

<% "some\nmultiline\ntext".lines.each do |line| %>
  <%= line %> <br />
<% end %>

但以下工作正如我所期望的那样:

<% "some\nmultiline\ntext".lines.to_a.each do |line| %>
  <%= line %> <br />
<% end %>

并打印:

some 
multiline 
text 

肯定不仅仅是意外地加入了=。什么可能导致这种奇怪的行为?

我正在使用Rails 3.0.10,Ruby 1.9.2。

1 个答案:

答案 0 :(得分:0)

我不能肯定地说,但"some\nmultiline\ntext".lines Enumerator"some\nmultiline\ntext".lines.to_aEnumerable,最大的区别在于当您将Enumerable模块混合到你的班级必须定义其工作的each方法 将项目生成到提供的代码块,一次一个。枚举器是Ruby最近的重要补充。枚举器是一个对象,而不是一个方法。枚举器不是容器对象。它没有“自然”基础的每个操作,数组的方式(从元素0开始;产生它;转到元素1;产生它;依此类推)。必须明确指定每个枚举器的每个迭代逻辑。