岡本といいます。

先日何気なく下のようなコードを書いてみたところ、何の問題もなく動きました。

class Foo
    attr_accessor :memb
    def foo( arg = 1 )
        return arg
    end
    def goo( arg = @memb )
        return arg
    end
    def hoo( arg = $1 )
        return arg
    end
end
a = Foo.new
p a.foo    => 1
p a.goo    => nil
a.memb=5
p a.goo    => 5
/str(ing)/ =~ "string"
p $1        => "ing"
p a.hoo    => nil

デフォルト引数として与える式のスコープは呼び出されるメソッド側のスコープと
同じらしいと解釈したのですが、「完全に」同じと考えて差し支えないんでしょうか。


何でこんなことをやったかというと

def foo( arg = nil )
    if arg != nil
        @memb = arg
    else
        arg = @memb
    end
    ......
end

のようなコードを

def foo( arg = @memb )
    @memb = arg
    ......
end

と、より単純にかけるかな、と思ったからです。

そう書けたとして、そんなに嬉しいもんなのか自分でも分からんのですが…。