2011-12-14 11 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_aで大きな違いは、あなたのクラスにEnumerableモジュール内に混在させると、あなたが供給に 利回りアイテムにその仕事それがeachメソッドを定義しなければならないことであるEnumerableですコードブロック、一度に1つ。列挙子はRubyに最近追加された重要な要素です。列挙子はオブジェクトであり、メソッドではありません。列挙子はコンテナオブジェクトではありません。各操作のための「自然な」基盤、配列のやり方(要素0から始まり、それを生成する、要素1に進む、それを生成するなど)はありません。すべての列挙子の各反復ロジックを明示的に指定する必要があります。

+0

よく練り上げられたRubyistのテキストのチャンク、第10章 – Bohdan

関連する問題