Ruby当前类实际上是什么?

时间:2019-03-31 08:46:55

标签: ruby

在元编程Ruby中,它告诉我们,不仅self而且Ruby中还存在一个当前类。

我的问题是:如何知道当前的班级是什么?如果我们定义一个方法,定义放在哪里?令我困惑的是这两个代码之间的区别。运行结果不一样。

它表明也许当我们想定义一个方法时,我们使用class打开一个类,然后定义self.method,这与使用类<< self打开是不同的一个类,然后定义方法。实际上,它不会在实际工作中使用,但我只想知道。

class C
  def self.m1
    puts "when in m1, self is #{self}"
    def m2; end
  end
end

class D < C
end

C.m1
  # when in m1, self is C
C.instance_methods false 
  #=> [:m2] 
C.methods false 
  #=> [:m1] 

class C
  class << self
    def m1
      puts "when in m1, self is #{self}"
      def m2
      end
    end
  end
end

class D < C; end

C.m1
  # when in m1, self is C
C.instance_methods false 
  #=> [] 
C.methods false
  #=> [:m1, :m2]  

1 个答案:

答案 0 :(得分:0)

第一段代码的当前类别为C。尽管您在m2中定义了self.m1,但是当前的类是Cm2是实例方法。

第二个片段的当前类别为C singleton_class 。编写class << self时,将打开当前类的单例类,在这种情况下为C。因此,m2是C singleton_class 的实例方法。