[ruby-list:45965] Re: 質問: String#lines の挙動について
From:
Ginga Baba <ginga@...>
Date:
2009-04-14 18:01:19 UTC
List:
ruby-list #45965
gingaです。
On Tue, 14 Apr 2009 22:32:58 +0900
rubikitch@ruby-lang.org さん wrote:
> るびきちです。
> File オブジェクトをレシーバにしている時点で String#lines は呼ばれません。
>
> > --test1.rb---------------------
> > File.open("test.txt") { |f|
> > f.lines {|line| print line }
> > }
> > ------------------------------
> >
> > では、出力されません。
>
> ここでは IO#lines が呼ばれます。
大きな勘違いをしていました。
ありがとうございました。
> しかし、妙ですね。 String#lines と String#each_line 、 ARGF.line と
> ARGF.each_line は同じ関数を呼んでいるのに対し、 IO#lines と IO#each_line は
> 別々の関数を呼んでいますね。
>
> ### io.c
> 5986: rb_define_method(rb_cIO, "each_line", rb_io_each_line, -1);
> 5989: rb_define_method(rb_cIO, "lines", rb_io_lines, -1);
> 6080: rb_define_singleton_method(argf, "each_line", argf_each_line, -1);
> 6083: rb_define_singleton_method(argf, "lines", argf_each_line, -1);
>
> ### string.c
> 5124: rb_define_method(rb_cString, "each_line", rb_str_each_line, -1);
> 5129: rb_define_method(rb_cString, "lines", rb_str_each_line, -1);
ええ、妙ですね。