yarv-dev:24
From: "K.Sasada" <ko1 namikilab.tuat.ac.jp>
Date: Mon, 17 May 2004 16:58:13 +0900
Subject: [yarv-dev:24] Re: initialize block local variables
ML: yarv-dev quickml.atdot.net
新メンバー: ko1@n...
matz ruby-lang.org (Yukihiro Matsumoto) wrote :
[ [yarv-dev:23] Re: initialize block local variables ]
at Mon, 17 May 2004 16:14:38 +0900
ささだです。
迅速なご返信に感謝します。
> evalで増えたりしないのでより静的にできるとかを考えてました。
eval などの動的な部分は考えてもみませんでした。
そういえば、eval 中で出てきた新しい変数って、ブロックロー
カル変数扱いになるんだと思っていたのですが、どうなんでしょう
か。揮発性(?)メソッドローカルみたいな変なものを新しく導入
したりするんでしょうか。
って、現在の実装もよくわかっていないのでソース見て出直して
きます。
eval('i=1; p defined?(i)')
p i
#=>
"local-variable"
t.rb:4: undefined local variable or method `i' for main:Object (NameError)
> |2. ブロックパラメータの渡し方
> ここはまだ決めていません。おそらくは「多重代入と同じだが、多
> 重代入が現状よりも整理される」のではないかと。
>
> 現状の多重代入は複雑怪奇なルールですが、新しいものは
>
> * return, yieldなどに複数の値を渡すとValuesオブジェクトを
> 作る。
>
> * 複数の左辺値はValuesオブジェクトの各要素と対応する。
配列を展開する今の仕様は obsolete ということでしょうか。
また、配列の展開によるブロックパラメータの渡し方である、
def m
yield([1,2])
end
m{|i,j|
p i,j #=> 1,2
}
は、駄目になるんでしょうか。
> | 新しく導入するキーワード引数もブロックパラメータに含まれる
> |のでしょうか。
>
> 気持ちとしてはlamdaを予約語にしてlambdaのパラメータだけキー
> ワード引数やブロック引数を受け付けるようにしたいのですが、
> define_methodのようなメソッドのためには普通のブロックパラメー
> タにもこれらを含みたいんですよね。悩んでます。
define_method の仕様を変えて、ブロックとしてわたってきた NODE
をメソッドとして利用する、ような対応は不可能でしょうか。
define_method(:m){|i,j|
...
}
<= 無理やり同じ =>
eval <<-EOS
def m(i,j)
...
end
EOS
こういう無理やりな操作はあとで後悔するかな・・・。
> 評価順序は基本的に左から右、上から下です。
> 文法は
>
> 定義側
>
> def foo(a, b=15, *rest, c:val, **krest)
> ...
> end
>
> 呼び出し側
>
> foo(1, 2, 4, *ary, c:44, k:42, **hash)
>
> です。
評価順序、という言葉は、キーワード引数がどこに来てもいいも
のだと思っていたのでそう書きました。
callee:
def foo(a, b, c, *rest, k:100, **krest)
p a,b,c,k,rest
end
caller:
foo(1, 2, k:3, 4, 5)
#=> 1 2 4 3 5
のようなものを想像していました。
(キーワード引数をサポートした言語を知らないので。すみません)
最後にまとまるんなら、問題ないかもしれませんね。
(でも、どういうふうにアクセスするんだろう。新しい
node or bytecode を増やして実現するのかな。)
また、proxy オブジェクト作るときとかの method_missing は、
def method_missing *args, **kargs
...
someobj.send *args, **kargs # (A)
end
のように書かないといけなくなるんですね。
((A) の部分は本当にこう書くのかわかりませんが)
--
// SASADA Koichi at atdot dot net
//
--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml
このMLを退会する方法:
- 本文が空のメールを <yarv-dev quickml.atdot.net> に送ってください
- 本文が空のメールを送れない場合は、
本文に「退会」とだけ書いたメールを <yarv-dev quickml.atdot.net> に送ってください
(署名やhotmailの広告などがついて空メールを送れない場合など)
<yarv-dev quickml.atdot.net> のメンバー:
ko1@a...
aamine@l...
babie7a0@y...
cv8t-hdk@a...
fukumori@m...
g-stuff@b...
gotoyuzo@n...
iga@r...
ikoma@m...
kawaji@h...
kou@c...
kumaryu@k...
maeda-yarv@a...
makoto.nakagawa@h...
masato@c...
matz@r...
nobsun@s...
nobu.nakada@n...
sakai@t...
sheepman@t...
shudo@c...
shugo@r...
usa@g...
yuya-ml@4...
zn@m...
nobu.nokada@s...
ko1@n...
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]