Ruby在外行中的表现?

时间:2011-04-20 17:43:05

标签: ruby

什么时候Ruby自我引用了Object,什么时候自我引用Ruby类?用例子解释会很棒。没有理解这一点。

3 个答案:

答案 0 :(得分:5)

类实际上是对象本身。假设我有一个类Person,这实际上是Class的一个实例。因此,您可以自我引用文章的实例,或者您可以自我引用类的实例Article

在最简单的例子中,我可以想到:

class Person
  def initialize
    p "Info about Person Instance"
    p self
    p self.class
  end

  p "Info about Person Class"
  p self
  p self.class
end


person = Person.new

打印:

"Info about Person Class"
Person
Class
"Info about Person Instance"
#<Person:0x0000010086cf58>
Person

要详细了解自我,I highly recommend read this.

答案 1 :(得分:3)

我可以尝试自己解释一下,但我认为Yehuda Katz比我做得更好:

Metaprogramming in Ruby: It’s All About the Self

答案 2 :(得分:2)

我的理解是

  • 在定义类方法或module_functions的环境中,self指的是类/模块。
  • 在您定义实例方法的环境中,self引用实例。

例如,

class A
  def method1
    self # => instance of A
  end
  def self.method2
    self # => class A
  endu
  def A.method3
    self # => class A
  end
end

class << A
  def method4
    self # => class A
  end
end

module B
  module_function
  def method5
    self # => module B
  end
end

例外情况是instance_evalinstance_exec改变self接收者。