From: Takaaki Tateishi Date: 2002-06-03T17:41:06+09:00 Subject: [ruby-dev:17294] Re: blocks and local variables At Mon, 3 Jun 2002 06:26:56 +0900, > |そのため,定義された時点での変数と重なると都合が悪いと思うので > |すがどうでしょうか? > > ええ、都合が悪い(というか重なることを予期してない)場合もある > と思います。現時点では「だから重複しないようにしてね」という > 方針なわけですが、これに対してどう手当てするのが適切だと思い > ますか? ブロック変数はブロックに固有の局所変数にするのが良いです.つまり, メソッドの引数と同じような扱いが良いです. ところで,重なることを意図する場合のブロック変数の使い方というのは あるのでしょうか? > 文法の複雑さや使いやすさ、互換性などいろいろ考えないといけま > せんが。 すでに 局所変数を foo{|$a| ... } のように代入の代わりに使ってい る人はいるかもしれませんが,大域変数,インスタンス変数,クラス 変数については現在のままでも良いと思っています. ブロックは書かれた場所で使われるわけではないので,ブロック変数へ の値は書かれた場所ではなくて,ブロックが使われたときに決まります. そのため,使われる場所以外のことまで考えてブロック変数の名前を考 えたくないということから,僕は使いやすさは向上すると思います. 互換性についてですが,今まで重ならないように使ってきた人にとって は問題は起きないと思います.そのため,先に書いたように,局所変数 を重ねて使う場合の意図を知りたいです. たとえば,$x にブロックに与えれた値を渡したい場合に, foo{|$x|} を使うのはなんとなく気持ちは分かるのですが,局所変数 x の場合, x = nil foo{|x|} はどういう見やすさの基準が働くのでしょう? -- Takaaki Tateishi