[前][次][番号順一覧][スレッド一覧][生データ]

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]