2011-12-14 57 views
3

这让我完全困惑了一阵子。我收到了奇怪的行为,试图循环erb中的文本行,并在循环完成时打印整行文本。ERB在each_line循环结束时打印出enitre字符串

<% "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

我不能肯定地说,但"some\nmultiline\ntext".linesEnumerator"some\nmultiline\ntext".lines.to_aEnumerable最大的区别是,当你在Enumerable模块搭配你的类,你必须定义each方法,其工作是 产量物品供给代码块,一次一个。统计员是Ruby最近的重要补充。枚举器是一个对象,而不是一个方法。枚举器不是容器对象。它对每个操作都没有“自然”的基础,就像数组的方式一样(从元素0开始;产生它;到元素1;产生它;等等)。每个枚举器的每个迭代逻辑都必须明确指定。

+0

大量来自The Grounded Rubyist,第10章的文本。 – Bohdan 2011-12-14 16:18:12