Method: Object#attribute
- Defined in:
- lib/utilrb/object/attribute.rb
#attribute(attr_def, &init) ⇒ Object
call-seq:
attribute :name => default_value
attribute(:name) { default_value }
In the first form, defines a read-write attribute named ‘name’ with default_value for default value. In the second form, the block is called if the attribute is read before it has been ever written, and its return value is used as default value.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/utilrb/object/attribute.rb', line 11 def attribute(attr_def, &init) # :nodoc: if Hash === attr_def name, defval = attr_def.to_a.flatten else name = attr_def end class_eval do attr_writer name if !defval && init define_method("#{name}_defval", &init) else define_method("#{name}_defval") { defval } end end class_eval <<-EOD, __FILE__, __LINE__+1 def #{name} if instance_variable_defined?(:@#{name}) then @#{name} else @#{name} = #{name}_defval end end EOD end |