From: Makoto Inada Date: 2007-02-18T12:23:18+09:00 Subject: [ruby-dev:30382] Re: class local instance variable ------=_Part_22749_5208991.1171768995187 Content-Type: text/plain; charset=ISO-2022-JP; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline 稲田です。 > でも、ここではMerongクラスのローカルインスタンス変数にアクセスできるというのが一般的な期待なんでしょうか。 私はそう期待します。プログラムを書いていて instance_eval を使うときは大抵、既に存在するオブジェクトを直接操作/参照するつもりで書いているので、 1. 特異クラスの存在を(たとえ知っていても)意識していない、 2. そのオブジェクトのインスタンス変数にはすべてアクセスできると思ってしまう、 というふうに考えています。この文脈から見れば、(暗黙で作られた)特異クラスがあるためにオブジェクトの元クラスのローカルインスタンス変数にアクセスできないというのは、唐突な感じがします。 instance_eval でなくてオブジェクトに特異メソッドを追加する場合でも、同じように感じます。 これが、明示的にサブクラスを作っていれば、「オブジェクトにはスーパークラスで定義されたアンタッチャブルな部分がある」で簡単に納得できるんですが。 ------=_Part_22749_5208991.1171768995187 Content-Type: text/html; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Content-Disposition: inline 稲田です。

> でも、ここではMerongクラスのローカルインスタンス変数にアクセスできるというのが一般的な期待なんでしょうか。

私はそう期待します。プログラムを書いていて instance_eval を使うときは大抵、既に存在するオブジェクトを直接操作/参照するつもりで書いているので、

1. 特異クラスの存在を(たとえ知っていても)意識していない、
2. そのオブジェクトのインスタンス変数にはすべてアクセスできると思ってしまう、

というふうに考えています。この文脈から見れば、(暗黙で作られた)特異クラスがあるためにオブジェクトの元クラスのローカルインスタンス変数にアクセスできないというのは、唐突な感じがします。
instance_eval でなくてオブジェクトに特異メソッドを追加する場合でも、同じように感じます。

これが、明示的にサブクラスを作っていれば、「オブジェクトにはスーパークラスで定義されたアンタッチャブルな部分がある」で簡単に納得できるんですが。

------=_Part_22749_5208991.1171768995187--