主要观点:Ruby 的基本原理是万物皆对象,数据、类等都是对象,都有属性和行为。对象有唯一标识符(object ID),可用于区分对象实例。
关键信息:
- 每个数据类型如数字、字符串等都是对象,如
1.is_a?(Object)为true。 - 每个对象都有
object ID,如nil.object_id等。 - 变量分为实例变量(
@前缀)和类变量(@@),实例变量存储对象的独立状态,类变量在类的所有实例间共享。 - 方法调用遵循方法查找链,包括对象的单例类、对象的类、包含的模块、超类链、
Kernel模块、Object类和BasicObject。 - Ruby 支持开放类,可在运行时修改类的行为,如
ActiveSupport利用开放类扩展核心类。 - 元编程通过动态创建和修改代码来实现各种功能,如
attr_accessor利用元编程动态创建方法,method_missing用于处理未定义方法。
重要细节: Object的超类是BasicObject,nil等对象的object ID是固定的,而普通对象的object ID是动态分配的。- 方法查找链中先查找单例类中的方法,再依次查找类、包含的模块等。
- 开放类虽灵活但有风险,需谨慎使用,
method_missing可处理未定义方法的情况。例如DynamicHash类通过method_missing实现动态哈希表的功能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。