[ruby-dev:24224] Re: 1.instance_eval "@@a" dumps core

From: Tanaka Akira <akr@...17n.org>
Date: 2004-09-05 12:21:19 UTC
List: ruby-dev #24224
In article <1094381475.779184.6159.nullmailer@picachu.netlab.jp>,
  Yukihiro Matsumoto <matz@ruby-lang.org> writes:

> えーと、実装したのが「あるべき仕様」なんじゃなくて、「ネスト

はい。言葉が足りませんでしたが、現在の実装があるべき仕様ではないことは
理解していて、あるべき仕様がなぜそういう仕様なのかを尋ねているつもりで
す。Ruby2 の仕様について尋ねていると考えてください。

> の外に見に行かない」のが「あるべき仕様」のつもりでした。問題
> はそういう条件でもネストの外に見に行かなくてはいけないケース
> があることをすっかり忘れて、中途半端なものを実装してしまった
> ということです。

現在の実装があるべき仕様でないことは [ruby-dev:24221] によりわかったの
で、[ruby-dev:24219] の説明があるべき仕様なのだろうと思っていたのです
が、違うんでしょうか?

[ruby-dev:24220] で指摘したように、ちょうど [ruby-dev:24219] の説明は
現在の実装とは異なりますし。

> 「予定されている仕様」というのは、instance_evalおよび特異メ
> ソッド定義の内側ではネストの1段外側を見る、です。
> instance_eval()の場合はその呼び出し地点でのクラス変数の値で
> すし、特異メソッド定義の場合は、定義対象のオブジェクトに関ら
> ず、それを囲んでいるクラスのクラス定数です。

なるほど。

> 「普通のクラスのクラス変数」というのは
>
>   1.instance_eval("@@a")
>
> がFixnumクラスのクラス変数を参照するということでしょうか。そ
> れはできるだけ静的スコープにしたいという私の希望には反するの
> ですが。
>
>   class Fixnum
>     @@a = 1
>   end
>   class Foo
>     @@a = 4
>     p 1.instance_eval("@@a")
>   end
>
> が、1でなく4を出力するのがよいのではないかと思っています。

[ruby-dev:24219] の説明に出てきた特異クラスというのはここには出て来な
いように思うのですが、あの説明はもう関係ないんでしょうか?
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread