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