有没有在Ruby中是指一类的当前实例,在方式方法self
指的是类本身?
Answer 1:
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
Answer 2:
在一个类的实例方法self
是指实例。 为了得到一个情况下,你可以调用在类self.class
。 如果你打电话给self
一个类的方法中,你得到的类。 里面一个类的方法,你不能访问类的任何实例。
Answer 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
Answer 4:
该方法self
指它所属的对象。 类定义的对象了。
如果使用self
类定义它是指类定义 (对类) 的对象 ,如果你把它叫做类方法中它指的是类试。
但在实例方法它指的是类的实例的对象。
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 >
你看放#1类声明中执行。 它表明, class A
是类型类的对象ID为== 85789490。 因此,内部类声明的自我是指类。
然后,当类的方法被调用(#4) self
类方法内(#2)再次是指类。
并且当被调用的实例方法(#5)它表明在其内部(#3) self
指该方法被附接到类实例的对象。
如果您需要引用实例方法使用内部类self.class
Answer 5:
可能是你需要:自己的方法?
1.itself => 1
'1'.itself => '1'
nil.itself => nil
希望这帮助!
文章来源: Ruby method like `self` that refers to instance