1 # -*- encoding: binary -*-
3 class Raindrops::Struct
6 members = members.map { |x| x.to_sym }.freeze
8 def initialize(*values)
9 (MEMBERS.size >= values.size) or raise ArgumentError, "too many arguments"
10 @raindrops = Raindrops.new(MEMBERS.size)
11 values.each_with_index { |val,i| @raindrops[i] = values[i] }
14 def initialize_copy(src)
15 @raindrops = src.instance_variable_get(:@raindrops).dup
19 @raindrops[index] = value
27 ary = @raindrops.to_ary
29 MEMBERS.each_with_index { |member, i| rv[member] = ary[i] }
34 members.each_with_index do |member, i|
35 str << "def incr_#{member}; @raindrops.incr(#{i}); end; " \
36 "def decr_#{member}; @raindrops.decr(#{i}); end; " \
37 "def #{member}; @raindrops[#{i}]; end; " \
38 "def #{member}=(val); @raindrops[#{i}] = val; end; "
42 klass.const_set(:MEMBERS, members)