Sha256: c8ff4a2852cb89220367343590af73f01f56bb19b918242b7e781c0ee0768890

Contents?: true

Size: 554 Bytes

Versions: 12

Compression:

Stored size: 554 Bytes

Contents

module MissileEmitter
  module Attributes
    MissileEmitter do |klass, field, default, *, &block|
      attribute = "@#{field}" # 构造实例变量名称,如:name => @name
      # 动态定义实例⽅法
      klass.define_method field do
        if instance_variable_defined?(attribute)
          instance_variable_get attribute
        else
          #返回声明的默认值,同样考虑传递Proc的情况
          block ? instance_eval(&block) : default
        end
      end
      # 写值⽅法
      attr_writer field
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
missile_emitter-0.3.11 lib/missile_emitter/attributes.rb
missile_emitter-0.3.10 lib/missile_emitter/attributes.rb
missile_emitter-0.3.9 lib/missile_emitter/attributes.rb
missile_emitter-0.3.8 lib/missile_emitter/attributes.rb
missile_emitter-0.3.7 lib/missile_emitter/attributes.rb
missile_emitter-0.3.6 lib/missile_emitter/attributes.rb
missile_emitter-0.3.5 lib/missile_emitter/attributes.rb
missile_emitter-0.3.4 lib/missile_emitter/attributes.rb
missile_emitter-0.3.3 lib/missile_emitter/attributes.rb
missile_emitter-0.3.2 lib/missile_emitter/attributes.rb
missile_emitter-0.3.1 lib/missile_emitter/attributes.rb
missile_emitter-0.3.0 lib/missile_emitter/attributes.rb