[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);

ええ、妙ですね。


In This Thread

Prev Next