From: "岡本" Date: 2000-11-16T17:43:45+09:00 Subject: [ruby-list:26025] Re: def foo(arg=@member) 岡本です。 > > def foo( arg = nil ) > > if arg != nil > > @memb = arg > > else > > arg = @memb > > end > > ...... > > end > > > > のようなコードを > > > > def foo( arg = @memb ) > > @memb = arg > > ...... > > end > > > > と、より単純にかけるかな、と思ったからです。 > > これだと foo(nil) の動作が違いませんか。 そう言えばそうですね。 もともと、一旦作ったオブジェクトを initialize で再初期化しよう、という思い付きから 手をつけまして、 foo = Foo.new(50) ..... foo.initialize(5) ...... foo.initialize のように使って、引数が渡せば対応するメンバの値をその値で更新し、 引数を省略すればそのメンバの値を変えないようにしよう、と考えていました。 「引数がなければ」というのが頭にあって、明示的にnilを与えた時のことを考えて なかったですね。 このアイデアも結局お蔵入りになったのですが、デフォルト引数に使える式の条件が気になった もので投稿しました。 ようは呼ばれるメソッドのローカルなスコープの変数を使った任意の式が使えるんですね。 今試してみたら def foo( arg = ( /str(ing)/=~"string"; $1) ) p arg end foo() =>"ing" とかいう馬鹿なこともできました。