2011-12-14 54 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