From: NISHIO Mizuho Date: 2002-06-18T02:55:34+09:00 Subject: [ruby-dev:17496] Re: blocks and local variables どうも西尾です。 Yukihiro Matsumoto wrote: >まつもと ゆきひろです > >In message "[ruby-dev:17489] Re: blocks and local variables" > on 02/06/17, Tanaka Akira writes: > >|> ブロックパラメータの使われ方には、ループ変数としての使われ方 >|> と、クロージャの引数としての使われ方があり、それぞれ独立して >|> いるので、別々の記法を用意した方が良い >| >|これって本当に独立しているんでしょうか? > >私はそう思いました。 > > 何故そう考えたのかもう少し詳しく教えてくれませんか? >|クロージャの引数の場合にブロックローカルなのが適切なのはいいとして、ルー >|プ変数がブロックローカルでないほうが便利なケースってどういう場合なんで >|しょうか? > >いや、便利なケースがあるかないかという問題も重要ですが、ルー >プ変数のルールが「代入である」という今のルールでさえ結果とし >て十分複雑なのに、それにさらに「ただしローカル変数であればブ >ロックローカルになる」というルールを追加してより複雑にする価 >値があるかどうかという点も考慮する必要があると思います。 > > # 私は互換性を捨てるのならば、ブロックパラメーターとして # ローカル変数のみ使用可能にしてほしいと思っていますが。 Rubyの変数は一般に代入によって宣言されるので、 ブロックパラメーターについても |..| で代入を行い、 ルールとしての一貫性を保っているわけですね。 確かにルールとしての一貫性は必要ですが、 それが逆に仕様を分かりにくくしていると思います。 実際に仕様を変更することでどのような問題があるか調べるために [ruby-talk:42355] で書かれているようにRubyの仕様をグローバル変数 によって変更させることは可能ですか? # グローバル変数を使うのはあまり良くない気がしますけど。