Ruby元编程笔记 - 对象模型

Tips
  • 类名不过是常量
  • 对象包含了实例变量,它就好像一个Hash表一样。
  • 方法存放在类之中。
类自身也是对象
"hello".class #=> String
String.class  #=> Class
Class.class  #=> Class

String.ancestors
  #=> [String, Comparable, Object, Kernel, BasicObject]
Object.superclass
  #=> BasicObject

Class.ancestors
  #=> [Class, Module, Object, Kernel, BasicObject]

  • 所有的类都是Class的子类,而Class继承自Module。所以类只是比模块多了superclass(), new(), allocate()这三个方法。

  • Kernel只是mixin在BasicObject里的一个模块,它能出现在ancestors中,但并不代表Object继承自Kernel。因为这个祖先链的关系,所以所有对象都能调用Kernel里的方法。

self

顶级上下文:

self        #=> main
slef.class  #=> Object

当开始运行ruby程序的时候,解释器会创建一个名为main的对象最为当前对象,它被称为顶级上下文(top level context)是因为这时处在调用堆栈的顶层:这时要么还没有调用任何方法,要么调用的方法都已经返回了。P.S. Ruby的main对象和C系的main函数没有关系。

private
  1. 如果调用方法的接收者不是自己,则必须指明一个接收者;
  2. 私有方法只能被隐含接收者调用;

所以,不能明确指定一个接收者调用一个私有方法,即每次调用私有方法只能用隐含的接收者self调用。

所以与C系语言不同的是,子类可以调用基类的私有方法。

你可能感兴趣的:(Ruby元编程笔记 - 对象模型)