From: rubikitch@... Date: 2008-02-22T00:46:10+09:00 Subject: [ruby-dev:33891] shadowing outer local variable るびきちです。 警告「shadowing outer local variable」はなくすべきだと思います。 そもそも原因は1.8までのブロック引数の仕様がひどかったからです。 警告を消すには1.8まで同様たとえ1文のブロックであっても ブロック引数の名前を変更しないといけなくなります。 これはかなりストレスがたまります。 善し悪しは別として同じ変数名を使うのはLispやC言語でも普通に行われています。 むしろこの警告は1.8につけるべきです。 RUBY_VERSION # => "1.9.0" RUBY_RELEASE_DATE # => "2008-02-20" a = 1 b = [1,2].map{|a| a*2} # => [2, 4] # !> shadowing outer local variable - a (let ((a 1) b) (setq b (mapcar (lambda (a) (* a 2)) '(1 2))) (list a b)) ; => (1 (2 4)) diff -u /home/nobackup/compile/ruby19/parse.c.orig /home/nobackup/compile/ruby19/parse.c --- /home/nobackup/compile/ruby19/parse.c.orig 2008-02-22 00:43:34.000000000 +0900 +++ /home/nobackup/compile/ruby19/parse.c 2008-02-22 00:42:47.000000000 +0900 @@ -12790,7 +12790,6 @@ yyerror("duplicated argument name"); } else if (dvar_defined(name) || local_id(name)) { - rb_warningS("shadowing outer local variable - %s", rb_id2name(name)); vtable_add(lvtbl->vars, name); } } -- rubikitch Blog: http://d.hatena.ne.jp/rubikitch/ Site: http://www.rubyist.net/~rubikitch/