yarv-dev:25
From: (Yukihiro Matsumoto) <matz ruby-lang.org>
Date: Mon, 17 May 2004 17:27:25 +0900
Subject: [yarv-dev:25] Re: initialize block local variables
まつもと ゆきひろです In message "[yarv-dev:24] Re: initialize block local variables" on 04/05/17, "K.Sasada" <ko1 namikilab.tuat.ac.jp> writes: | そういえば、eval 中で出てきた新しい変数って、ブロックロー |カル変数扱いになるんだと思っていたのですが、どうなんでしょう |か。揮発性(?)メソッドローカルみたいな変なものを新しく導入 |したりするんでしょうか。 eval内だけ有効のローカル変数です。実装はたぶんブロックパラメー タのものを流用できると思います。 | また、配列の展開によるブロックパラメータの渡し方である、 | | def m | yield([1,2]) | end | | m{|i,j| | p i,j #=> 1,2 | } | | は、駄目になるんでしょうか。 はい。 yield(*[1,2]) としてください。 | define_method の仕様を変えて、ブロックとしてわたってきた NODE |をメソッドとして利用する、ような対応は不可能でしょうか。 | | define_method(:m){|i,j| | ... | } | <= 無理やり同じ => | eval <<-EOS | def m(i,j) | ... | end | EOS | | こういう無理やりな操作はあとで後悔するかな・・・。 たぶん。Lispとかならマクロでカバーする範囲だと思うんですが。 |(でも、どういうふうにアクセスするんだろう。新しい |node or bytecode を増やして実現するのかな。) と思います。 | また、proxy オブジェクト作るときとかの method_missing は、 | | def method_missing *args, **kargs | ... | someobj.send *args, **kargs # (A) | end | | のように書かないといけなくなるんですね。 |((A) の部分は本当にこう書くのかわかりませんが) そうなりますねえ。言われてみれば面倒ですね。 -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
15 2004-05-17 04:14 [ko1 atdot.net ] initialize block local variables 16 2004-05-17 08:38 ┗[matz ruby-lang.org ] 17 2004-05-17 10:37 ┣[ko1 atdot.net ] 20 2004-05-17 13:23 ┃┗[matz ruby-lang.org ] 22 2004-05-17 15:58 ┃ ┗[ko1 atdot.net ] 23 2004-05-17 16:14 ┃ ┗[matz ruby-lang.org ] 24 2004-05-17 16:58 ┃ ┗[ko1 namikilab.tuat.a] -> 25 2004-05-17 17:27 ┃ ┗[matz ruby-lang.org ] 26 2004-05-17 18:09 ┃ ┗[ko1 atdot.net ] 27 2004-05-17 18:38 ┃ ┗[matz ruby-lang.org ] 21 2004-05-17 13:45 ┗[nobu.nokada softhome]