[ruby-list:45961] 質問:String#linesの挙動について
From:
Ginga Baba <ginga@...>
Date:
2009-04-14 12:57:52 UTC
List:
ruby-list #45961
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]
です。
よろしくお願いします。