在ruby中,这种类型的定义是什么:self.class.method

时间:2012-02-02 10:22:45

标签: ruby class self

我是NOOB试图理解一些代码。

这个self.class.current_section有什么作用?

class MyClass
  class << self  
    def current_section(*section)
      if section.empty?
        @current_section
      else
        @current_section = section[0]
      end
    end
  end


  def current_section()
    self.class.current_section
  end

  def current_section=(section)
    self.class.current_section(section)
  end
end

3 个答案:

答案 0 :(得分:3)

self返回当前对象。

self.class返回当前对象的类。

self.class.current_section调用当前对象类的方法(该方法称为current_section)。

 def current_section()
    p self
    p self.class
 end

 current_section()

答案 1 :(得分:1)

它将对象接收的消息(方法调用请求)转发到相应的类。

假设你有一个班级

class MyClass
  def MyClass.current_section
    puts "I'm the class method."
  end

  def current_section
    self.class.current_section
  end
end

h = MyClass.new
h.current_section # outputs "I'm the class method."

调用h的方法,它会查找h的类(MyClass)并调用该类的方法current_section

因此,根据上面的定义,类MyClass的每个对象都有一个方法current_section,该方法被路由到该类的中心current_section

你的问题中类方法的定义只是使用不同的语法来做同样的事情:向类对象添加一个方法。

答案 2 :(得分:1)

class << self  
    def current_section(*section)
      if section.empty?
        @current_section
      else
        @current_section = section[0]
      end
    end
end

由于class << self语句,此代码部分正在类对象范围内进行评估。因此current_section被定义为类方法,可以作为Myclass.current_section.

调用
def current_section()
  self.class.current_section
end

这部分只是实例方法的定义,因此selfMyclass对象的实例。

self.class获取此类实例的类,因此Myclass,并调用该类的current_section方法。