[ruby-list:47202] Re: 今 def 文を実行すると、メソッドが定義されるクラス、にアクセスする方法

From: "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
Date: 2010-07-02 04:36:32 UTC
List: ruby-list #47202
> A と B は同じにならない気がするので何が正解かよく理解できてないのですが、
> self そのもの、もしくは Kernel#singleton_class だったりするでしょうか?

Kernel#singleton_class は知りませんでした。
http://redmine.ruby-lang.org/issues/show/1082 をちゃんと読めば背景とかわかるかな?
ありがとうございます。

> obj = Object.new
> obj.instance_eval {
>   self            # => #<Object:0x8877834>
>   singleton_class # => #<Class:#<Object:0x8877834>>
>   def foo; end
> }
> 
> class Foo
>   self            # => Foo
>   singleton_class # => #<Class:Foo>
>   def foo
>     self            # => #<Foo:0x8877078>
>     singleton_class # => #<Class:#<Foo:0x8877078>>
>     class << self
>       self            # => #<Class:#<Foo:0x8877078>>
>       singleton_class # => #<Class:#<Class:#<Foo:0x8877078>>>
>     end
>   end
> end

obj = Object.new
obj.instance_eval {
  singleton_class # => #<Class:#<Object:0x????????>>
}

class Foo
  self            # => Foo
  def foo
    self.class    # => Foo
    class << self
      self        # => #<Class:#<Foo:0x????????>>
    end
  end
end

この内容を、統一された式で取れないか、という感じになります。
# ネストしたdefの意味がドラスティックに変わりそうなのであまり意味がない?

In This Thread