class RDoc::Attr

由 #attr, #attr_reader, #attr_writer 或 #attr_accessor 创建的属性

属性

rw[RW]

该属性是可读的 ('R'),可写的 ('W'),还是两者都可 ('RW')?

公共类方法

new(text, name, rw, comment, singleton = false) 点击以切换源代码

创建一个新的 Attr,其主体为 textname,读/写状态为 rw,以及 commentsingleton 将其标记为类属性。

调用父类方法 RDoc::MethodAttr::new
# File rdoc/code_object/attr.rb, line 25
def initialize(text, name, rw, comment, singleton = false)
  super text, name

  @rw = rw
  @singleton = singleton
  self.comment = comment
end

公共实例方法

==(other) 点击以切换源代码

当属性的名称,singleton 和 rw 都相同时,它们是相等的

# File rdoc/code_object/attr.rb, line 36
def == other
  self.class == other.class and
    self.name == other.name and
    self.rw == other.rw and
    self.singleton == other.singleton
end
add_alias(an_alias, context) 点击以切换源代码

context 中将 an_alias 添加为属性。

# File rdoc/code_object/attr.rb, line 46
def add_alias(an_alias, context)
  new_attr = self.class.new(self.text, an_alias.new_name, self.rw,
                            self.comment, self.singleton)

  new_attr.record_location an_alias.file
  new_attr.visibility = self.visibility
  new_attr.is_alias_for = self
  @aliases << new_attr
  context.add_attribute new_attr
  new_attr
end
aref_prefix() 点击以切换源代码

属性的 aref 前缀

# File rdoc/code_object/attr.rb, line 61
def aref_prefix
  'attribute'
end
definition() 点击以切换源代码

根据情况返回 attr_reader,attr_writer 或 attr_accessor。

# File rdoc/code_object/attr.rb, line 78
def definition
  case @rw
  when 'RW' then 'attr_accessor'
  when 'R'  then 'attr_reader'
  when 'W'  then 'attr_writer'
  end
end
marshal_dump() 点击以切换源代码

转储此 Attr 以供 ri 使用。另请参阅 marshal_load

# File rdoc/code_object/attr.rb, line 102
def marshal_dump
  [ MARSHAL_VERSION,
    @name,
    full_name,
    @rw,
    @visibility,
    parse(@comment),
    singleton,
    @file.relative_name,
    @parent.full_name,
    @parent.class,
    @section.title
  ]
end
marshal_load(array) 点击以切换源代码

array 加载此 Attr。对于已加载的 Attr,以下方法将返回缓存的值

# File rdoc/code_object/attr.rb, line 124
def marshal_load array
  initialize_visibility

  @aliases      = []
  @parent       = nil
  @parent_name  = nil
  @parent_class = nil
  @section      = nil
  @file         = nil

  version        = array[0]
  @name          = array[1]
  @full_name     = array[2]
  @rw            = array[3]
  @visibility    = array[4]
  @comment       = array[5]
  @singleton     = array[6] || false # MARSHAL_VERSION == 0
  #                      7 handled below
  @parent_name   = array[8]
  @parent_class  = array[9]
  @section_title = array[10]

  @file = RDoc::TopLevel.new array[7] if version > 1

  @parent_name ||= @full_name.split('#', 2).first
end