From: Ginga Baba Date: 2009-04-14T21:57:52+09:00 Subject: [ruby-list:45961] 質問:String#linesの挙動について gingaと申します。 Ruby1.8.7およびRuby1.9において、 String#linesはString#each_lineの別名メソッドであると認識していましたが、 Fileオブジェクトをレシーバにし、ブロック付きでメソッドを呼び出すと、挙動 が異なるようです。 例えば、以下のテキストファイルがあり、 --test.txt-------------------- aa bb cc ------------------------------ 以下のスクリプトを実行すると、 --test.rb--------------------- File.open("test.txt") { |f| f.each_line {|line| print line } } ------------------------------ # => aa # => bb # => cc と出力されますが、 --test1.rb--------------------- File.open("test.txt") { |f| f.lines {|line| print line } } ------------------------------ では、出力されません。 このちがいは、仕様なのでしょうか。 お分かりになる方、お教えください。 なお、 String#bytesとString#each_byte、 String#charsとString#each_charでも、 同様の挙動のちがいがあります。 実行環境は、 ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32] ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386-mswin32] ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-linux] です。 よろしくお願いします。