From: Shin-ichiro HARA Date: 2002-06-24T15:01:39+09:00 Subject: [ruby-dev:17562] Re: blocks and local variables 原です。 >まつもと ゆきひろです >未定義エラーにはならないのでは。 > > x = x + 1 > >は左辺でxがローカル変数と確定され、実質 > > x = nil > x = x + 1 > >と同義になります。 あれ、それ知っていたんですが、、、一瞬勘違いしました。 >これは欠点ではないと思います。xが<;>で宣言されていない以上、 >xに対するこれ以外の解釈はRubyのほかの部分との整合性がないと >思います。 現在のローカル変数の扱いを敷衍すればすればそうなるでしょうが、 「y = foo(x) は期待通りだが、x = foo(x) が期待通り動かない」 という今まで無かった期待にもとづく苦情が発生しそう。新しいブ ロックローカル変数の登場によるスコープの重なり自体が新しい事 態なので、foo(x) の x を外の x と解釈しても、それほど整合性 が失われる感覚はないかも。 >|もう一つ案を。[ruby-dev:17533] の逆転の := と合わせてこういうの >|はどうでしょう。 >| >| ブロックパラメータが <...> で与えられれば、ローカル変数の >| 扱いは小迫案と同じ。<...;a,..> という記法は用いず、外部の >| ローカル変数に代入するには、a := を用いる。 >| >|前掲の「欠点」は共有しますが、明示的な宣言を避ける事ができます。 > >外部のローカル変数とは(明示的に宣言しない限り)名前空間として >独立というのがいさぎよいと感じているのですが、Ruby的にはむし >ろ原案(はらあん)や小迫案のほうが合っているのかもしれません。 ただ、やっぱり <> のあるなして、ドーンと変数の意味が変わってし まうのが気になるといえば気になりますね。 ところで、その [ruby-dev:17533] の、「! でブロックローカル変数 を表現し、外のローカル変数への代入を := で行う」という案に対す るご意見はいかがですか?(6)は冗談なので、全部冗談だと思われ たのかなあ。現状と100%互換で、かつ必要な機能は全てもってい て、それなりに決定版だと思うんだけど、、、見た目が悪い?