Ruby的方法,比如`self`引用实例(Ruby method like `self` that

2019-07-31 03:16发布

有没有在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
标签: ruby oop