Download - Ruby的类和对象模型
Reference
Ruby Hacking Guide (ruby 1.7.3 2002-09-12)http://code.google.com/p/rhgchs/
Metaprogramming Ruby(ruby 1.9)
本页是最有用的信息,读过这两个资料和打算去读的就不用往下看了。
能够响应请求(方法)和保持内部状态(实例变量)
响应请求必须通过类 (klass),保持内部状态通过 (st_table*)
struct RBasic {
unsigned long flags;
VALUE klass;
};
RClass
struct RClass {
struct RBasic basic;
struct st_table *iv_tbl;
struct st_table *m_tbl;
VALUE super;
};
类的引导
rb_cObject = boot_defclass("Object", 0);
rb_cModule = boot_defclass("Module", rb_cObject);
rb_cClass = boot_defclass("Class", rb_cModule);
metaclass = rb_make_metaclass(rb_cObject, rb_cClass);
metaclass = rb_make_metaclass(rb_cModule, metaclass);
metaclass = rb_make_metaclass(rb_cClass, metaclass);
(object.c)
Dynamic Ruby
后面借用 CRUD的方法来分析如何在 runtime中操作 ruby各元素,只是为了方便从这种角度来表明 ruby拥有的某些动态性质,不一定是最佳
方法,也没有列完整,仅作示例。
类的 CRUDC
class keyword
Class.new
R
Object.const_defined?
U
Openclass
Module
instance_eval, class_eval
method_missing
D
Object.send(:remove_const,:MyClass)不影响子类,因为只是删除 const
实例变量的 CRUD
C
@variable_name
attr_reader, attr_writer, attr_accessor
R
instance_variable_defined?
instance_variable_read
U
instance_variable_set
D
N/A