From: matz@... (Yukihiro Matsumoto) Date: 2002-07-26T19:10:19+09:00 Subject: [ruby-dev:17836] Re: self in block まつもと ゆきひろです In message "[ruby-dev:17833] Re: self in block" on 02/07/26, masaki writes: |いま考えてみると、私の提案は block の形式に手を付けなくても |initialze で context を切替える手段さえ用意してもらえれば良かった |わけですが、それでも |"self の切替えまではゆるせても、context の切替えはもっと困る。" |ので却下ということですね。 せっかく「ということですね」とまとめてくださいましたが、私が そんなことを発言しましたっけ? あるいはほかの誰かが。 私の正木案に対する発言の意図をまとめておきます。 * 正木案はselfのすり替えを含むので却下。<>か||でブロックの 挙動が大幅にかわるのは良くない。条件も複雑過ぎ。 * selfのすり替えを仕様に含む必然性を認めない。したければ define_methodやinstance_evalを使って自分でやること 次に正木さんが感じた「解決すべき」問題については * 無名関数が自分を参照する方法は、あまり必要性を感じない。 単に名前ひとつだけの問題なので。解決するならばJavaScript のような方法が良かろう(calleeとかね)が。 * ブロックの外側の名前に影響されないことが欲しい場合は確か にある。が、それがどういう手段で実現されるべきかは結論が 出ていない。外側の変数にアクセスできないのも困るし、名称 の重複を気にしたくはないし。 ということで、少なくとも私は "context の切替えは良くない"とい う趣旨の発言をしていないので、 |この "context の切替えは良くない" という理由を私が理解していないのが、 |話が噛み合わない原因のような気がします。 という「理由」は私にも分かりません。 |両方同時に解決する方法がまづいのなら、分離方式に反対する理由は全くあ |りません。 両方同時に解決する方法がまずいという点は理解していただけたと すると、 |"ブロックパラメーターと := で代入された変数はブロックローカルにする。" |というのが一番よさそうな気がします。 これはしごく妥当な感想だと思います。でも、正直なところ私はこ れにもまだ自信が無いのです。いざ採用するとなると互換性もあり ますし、それが本当に「Ruby流」なのかということにもやや疑問が ありますし。 まつもと ゆきひろ /:|)