ActiveSupport-core-ext class类

浏览:2070 发布日期:2016-09-22 14:20:50
  1. class_attribute(*attrs) 定义类级别的读写属性,其中对子类的类属性修改,不会影响父类的值。 它首先在当前类上定义name, name?方法。 再定义一个name=方法,其中,它会在此类的单件类上重写name方法,如果当前类是单件类,如果name方法已定义,返回这个方法值,否则返回单件类的此方法。

  2. cattr_reader 定义类只读属性,返回类变量的值

  3. cattr_writer 定义类只写属性,设置类变量的值,如果子类改变了属性值,那么父类的值一样会改变

  4. 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

  1. superclass_delegating_accessor(name, option = {}) 定义name,name=方法,定义name, name?, name= 类方法,将其派发到name的方法, 如果instance_reader为true,那么定义实例方法 name, name? ,派发到开头的方法中。

  2. 类方法 descendants 返回一个类的子类,包括直接子类以及子类的子类。

  3. 类方法 subclasses 返回一个类的直接子类,

它通过descendants方法,获得类的所有子类,然后遍历子类数组,判断它们是否有继承关系