class_attribute(*attrs) 定义类级别的读写属性,其中对子类的类属性修改,不会影响父类的值。 它首先在当前类上定义name, name?方法。 再定义一个name=方法,其中,它会在此类的单件类上重写name方法,如果当前类是单件类,如果name方法已定义,返回这个方法值,否则返回单件类的此方法。
cattr_reader 定义类只读属性,返回类变量的值
cattr_writer 定义类只写属性,设置类变量的值,如果子类改变了属性值,那么父类的值一样会改变
cattr_accessor 同时定义读、写属性
delegating_attributes.rb中定义两个私有方法:
_stash_object_in_method(object, method, instance_reader = true)
定义名为method的类方法,如果instance_reader为true,定义名为name的实例方法
superclass_delegating_accessor(name, option = {})
通过define_method,定义name=方法,并调用_stash_object_in_method方法,然后设置name= 的值为nil
superclass_delegating_accessor(name, option = {}) 定义name,name=方法,定义name, name?, name= 类方法,将其派发到name的方法, 如果instance_reader为true,那么定义实例方法 name, name? ,派发到开头的方法中。
类方法 descendants 返回一个类的子类,包括直接子类以及子类的子类。
类方法 subclasses 返回一个类的直接子类,
它通过descendants方法,获得类的所有子类,然后遍历子类数组,判断它们是否有继承关系