@@ -70,11 +70,10 @@ def [](name)
7070 end
7171
7272 def []=( name , value )
73- modifiable do |tbl |
74- key_name = _get_key_from_table_ ( name )
75- @sub_elements . delete ( key_name )
76- tbl [ key_name ] = value
77- end
73+ key_name = _get_key_from_table_ ( name )
74+ tbl = modifiable? # Ensure we are modifiable
75+ @sub_elements . delete ( key_name )
76+ tbl [ key_name ] = value
7877 end
7978
8079 # Makes sure ROS responds as expected on #respond_to? and #method requests
@@ -102,13 +101,16 @@ def method_missing(mid, *args)
102101 if len != 1
103102 raise ArgumentError , "wrong number of arguments (#{ len } for 1)" , caller ( 1 )
104103 end
105- modifiable? [ new_ostruct_member! ( $1. to_sym ) ] = args [ 0 ]
104+ # self[$1.to_sym] = args[0]
105+ # modifiable?[new_ostruct_member!($1.to_sym)] = args[0]
106+ new_ostruct_member! ( $1. to_sym )
107+ public_send ( mid , args [ 0 ] )
106108 elsif len == 0
107109 key = mid
108110 key = $1 if key =~ /^(.*)_as_a_hash$/
109111 if @table . key? ( _get_key_from_table_ ( key ) )
110112 new_ostruct_member! ( key )
111- send ( mid )
113+ public_send ( mid )
112114 end
113115 else
114116 err = NoMethodError . new "undefined method `#{ mid } ' for #{ self } " , mid , args
@@ -127,8 +129,7 @@ class << self; self; end.class_eval do
127129 self [ key_name ]
128130 end
129131 define_method ( "#{ name } =" ) do |x |
130- @sub_elements . delete ( key_name )
131- modifiable? [ key_name ] = x
132+ self [ key_name ] = x
132133 end
133134 define_method ( "#{ name } _as_a_hash" ) { @table [ key_name ] }
134135 end
@@ -148,15 +149,8 @@ class << self; self; end.class_eval do
148149 def delete_field ( name )
149150 sym = _get_key_from_table_ ( name )
150151 singleton_class . __send__ ( :remove_method , sym , "#{ sym } =" ) rescue NoMethodError # ignore if methods not yet generated.
151- @sub_elements . delete sym
152- @table . delete sym
153- end
154-
155- protected
156-
157- # TODO: Use modifiable? instead of modifiable once we care less about Rubies before 2.4.0.
158- def modifiable
159- block_given? ? yield ( super ) : super
152+ @sub_elements . delete ( sym )
153+ @table . delete ( sym )
160154 end
161155
162156 private
0 commit comments