あれ? ― 2009/07/09
Kernel.gets あたりのメソッド(いわゆる組み込み関数)が 組込み変数$_ を更新したり参照するマニュアルにも明記されて挙動の他に、 ローカル変数_ を更新しているっぽいのですが、これの挙動ってどこかに記述されていましたっけ?
irb(main):001:0> gets foobar => "foobar\n" irb(main):002:0> $_ => "foobar\n" irb(main):003:0> _ => "foobar\n"
gsubとかでも更新されます。
irb(main):004:0> gsub("o", "u") => "fuubar\n" irb(main):005:0> $_ => "fuubar\n" irb(main):006:0> _ => "fuubar\n"
変数として $_ と _ は別物らしい
irb(main):007:0> _ = nil => nil irb(main):008:0> $_ => "fuubar\n"
いわゆる組み込み関数の類が参照しているのは $_
irb(main):008:0> $_ => "fuubar\n" irb(main):009:0> _ => nil irb(main):010:0> gsub("u", "o") => "foobar\n" irb(main):011:0> $_ => "foobar\n" irb(main):012:0> _ => "foobar\n"
1.8.7 と 1.8.5で確認。
ゴルファー的にはいつか役に立ちそうな挙動だけど、なんか気持悪い。
最近のコメント