[#30408] Ruby 1.8.6 preview2 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 preview2 をリリースしました。

20 messages 2007/02/24
[#30414] fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Hidetoshi NAGAI <nagai@...> 2007/02/25

永井@知能.九工大です.

[#30418] Re: fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Nobuyoshi Nakada <nobu@...> 2007/02/25

なかだです。

[ruby-dev:30368] Re: class local instance variable

From: "Makoto Inada" <mak@...>
Date: 2007-02-17 06:08:57 UTC
List: ruby-dev #30368
はじめまして。いなだと申します。

insntance_eval
の方は調べてないんですが、特異クラスで定義されたメソッドから、クラスローカルインスタンス変数が見えません。サンプルコードを添付しておきました。1.9.02007-02-16
で動作確認しています。

オブジェクト独自のメソッドである特異メソッドは、オブジェクトのインスタンス変数のすべてにアクセスできるべきであるというのが正しいなら、クラスローカルインスタンス変数へもアクセスできるべきです。
一方で、「クラスローカル」を字義どおりに解釈するなら、特異メソッドはオブジェクトの一部とはみなせてもクラスの一部とは見なせないので、クラスローカルインスタンス変数にアクセスできないというのも理屈です。
この二つは両立しないんですが、どちらの解釈が正しいんでしょうか?個人的には前者の方が直感的で好みです。


class C
  def initialize
    @_ccc = 47
  end
def f
    @_ccc
  end
end

a = C.new

class << a
  def g
    @_ccc
  end
end

p a.f    # <-- 47
p a.g   # <-- nil


On 2/16/07, Nobuyoshi Nakada <[email protected]> wrote:
>
> なかだです。
>
> At Sat, 17 Feb 2007 02:18:00 +0900,
> Park Ji-In wrote in [ruby-dev:30363]:
> > 何かinstance_evalの中ではちょっとivar2が違うような気がします
> > があれが間違ったとすれば、@__x__/Merong となるように直したら
> > Singletonも元のコードで動くと思います。
>
> ivar2が違うのは確かなのですが、単にそれだけではすまないのではな
> いかと思います。たぶん、Singletonが動くようになればその表示も期
> 待されるようにはなるでしょうが。
>
> とりあえず分かっていることは、
> * instance_eval中と特異メソッド中ではget_cref()の戻り値が違う
> * 前者ではlfp_get_special_cref()が有効だが後者では無効
> くらい。もしかしたら、特異メソッド定義の際にcrefをpushするだけ
> でもいいかもしれませんが、あるいは定数探索と共通にしていること
> が問題なのかも。
>
> --
> --- 僕の前にBugはない。
> --- 僕の後ろにBugはできる。
>     中田 伸悦
>
>

In This Thread