Ruby对象与类的实现

对象

RObject结构体

  • RBasic 中的 flags存储内部专有值
  • RBasic 中的klass指针,用于指向RObject所属于的类
  • numiv 实例变量的数量
  • ivptr 实例变量值的数组

实例


class Mathematician
  attr_accessor :first_name
  attr_accessor :last_name
end

euler = Mathematician.new
euler.first_name = 'Leonhard'
euler.last_name = 'Euler'

euclid = Mathematician.new
euclid.first_name = 'Euclid'

实例

内置对象

立即值

类结构

  • m_tal 用于存储类的实例方法表
  • iv_index_tbl 实例变量的名称,实例变量的值是存放在RObject中的
  • super 指向超类的指针
  • iv_tbl 类实例变量表
  • const_tbl 常量表

元类

singleton_class

模块


module Professor
end
class Mathematican < Person
  include Professor
end

方法查找

ruby_method_lookup.png
  • 全局方法缓存
  • 内联方法缓存
  • 共享方法表

prepend

常量查找

词法作用域

Autoload

ruby_cons_lp.png

谢谢大家