< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事
N :次の記事
|<:スレッドの先頭
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
正木です。
In message "[ruby-dev:17739] Re: self in block"
matz / ruby-lang.org (Yukihiro Matsumoto) writes:
||new の場合与えられた block はそのまま initialize に渡されます。
||実際に block を解釈するのは initialize なので self は Proc の instance
||になるというのが、私の認識ですが、間違っていたら指摘してください。
|違います。直接間接にinstance_evalを呼んでselfをすり替えない
|限り、どこの誰がyieldを呼ぼうとselfはそのブロックが存在する
|文脈のselfのままです。
現状でそうなっているのは、承知しています。
私が提案した仕様が実現したとして
Proc.new{<n> n==0 ? 1:n*self[n-1]}
での self が Proc class 自身なのか、それともここで作られる Proc の
instance なのかという話です。
"[ruby-dev:17728] Re: self in block" でも書きましたが、
initialize の段階で(上記の例では)
"<n> n==0 ? 1:n*self[n-1]"
を new から渡された context で解釈しているのだという想像が仮に正しいとします。
block が新しい仕様で書かれているときは initialize 内の context
で解釈するように変更することは可能なのではないかということですが、
うえの想像は合っていますか?
source code を見れば? と言われそうですが、どの file を見ればよい
のかもわかりません。