19

selfクラス自体を参照する方法で、クラスの現在のインスタンスを参照するRubyのメソッドはありますか?

4

5 に答える 5

47

selfは常にインスタンスを参照しますが、クラス自体は のインスタンスですClass。特定のコンテキストselfでは、そのようなインスタンスを参照します。

class Hello
  # We are inside the body of the class, so `self`
  # refers to the current instance of `Class`
  p self

  def foo
    # We are inside an instance method, so `self`
    # refers to the current instance of `Hello`
    return self
  end

  # This defines a class method, since `self` refers to `Hello`
  def self.bar
    return self
  end
end

h = Hello.new
p h.foo
p Hello.bar

出力:

Hello
#<Hello:0x7ffa68338190>
Hello
于 2012-08-22T17:07:13.450 に答える
5

クラスのインスタンス メソッド内では、selfそのインスタンスを参照します。インスタンス内のクラスを取得するには、 を呼び出すことができますself.classselfクラス メソッド内で呼び出すと、クラスが取得されます。クラス メソッド内では、クラスのインスタンスにアクセスできません。

于 2012-08-22T17:08:07.230 に答える
3

メソッドselfは、それが属するオブジェクトを参照します。クラス定義もオブジェクトです。

selfクラス定義内で使用する場合は、クラス定義のオブジェクト(クラスを参照)を参照します。クラスメソッド内で呼び出すと、クラスを再度参照します。

ただし、instanceメソッドでは、クラスのインスタンスであるオブジェクトを参照します。

1.9.3p194 :145 >     class A
1.9.3p194 :146?>         puts "%s %s %s"%[self.__id__, self, self.class] #1
1.9.3p194 :147?>         def my_instance_method
1.9.3p194 :148?>             puts "%s %s %s"%[self.__id__, self, self.class] #2
1.9.3p194 :149?>             end
1.9.3p194 :150?>         def self.my_class_method
1.9.3p194 :151?>             puts "%s %s %s"%[self.__id__, self, self.class] #3
1.9.3p194 :152?>         end
1.9.3p194 :153?>      end
85789490 A Class
 => nil 
1.9.3p194 :154 > A.my_class_method #4
85789490 A Class
 => nil 
1.9.3p194 :155 > a=A.new 
 => #<A:0xacb348c> 
1.9.3p194 :156 > a.my_instance_method #5
90544710 #<A:0xacb348c> A
 => nil 
1.9.3p194 :157 > 

クラス宣言中に実行されるputs#1が表示されます。class Aこれは、id==85789490のClass型のオブジェクトであることを示しています。したがって、クラス宣言内では、selfはクラスを参照します。

次に、クラスメソッドが呼び出されると(#4)、selfクラスメソッド(#2)内で再びそのクラスを参照します。

また、インスタンスメソッドが呼び出されると(#5)、その内部(#3)selfが、メソッドがアタッチされているクラスインスタンスのオブジェクトを参照していることを示します。

インスタンスメソッド内でクラスを参照する必要がある場合は、self.class

于 2012-08-22T17:26:54.553 に答える
3

参照は常に利用可能であり、それselfが指すオブジェクトはコンテキストによって異なります。

class Example

  self  # refers to the Example class object

  def instance_method
    self  # refers to the receiver of the :instance_method message
  end

end
于 2012-08-22T17:13:45.730 に答える