正木です。

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 を見ればよい
のかもわかりません。