Ruby类结构总结

视频:https://eggman.tv/players/ruby-buildin-class-design
一、在ruby中,一切都是对象。当你定义了一个类,这个类名在ruby中就变成一个Class类的实例。
首先我们知道,所有实例都有class方法,返回这个实例的类。

A # 没定义A类前调用,报错 NameError: uninitialized constant A
class A
end
a = A.new
a.class # => A
A.class # => Class

说明当我们定义了A类,A就成了一个实例
二、Class的父类是Module,Class实例有一个superclass方法,返回这个类的父类

Class.superclass # => Module,表示Class的父类是Module
A.superclass # => Object, 表示A的父类是Object

三、先看一段代码

module B
  def hi
    p "hi from B"
  end
end
class A
  def hi
    super
    p "hi from A"
  end
end
a = A.new
a.hi # => hi from B \n hi from A 
a.ancestors # => [A, B, Object, Kernel, BasicObject](下面把这个数组称为方法链)

在其他语言中,一般我们认为super就是调用父类同名方法。在ruby我们可以这样认为,super是调用方法链中的第一个同名方法。

你可能感兴趣的:(Ruby类结构总结)