From: Ed Sinjiashvili Date: 2002-06-03T13:44:59+09:00 Subject: Re: $a = 5; $b = 'a'; print $$b Philip Mak writes: > And can this be done with instance variables? I'm trying to do this: > > class Series > attr_accessor :sid, :handle, :name > def initialize(vals) > vals.each_key { |key| > @(key) = vals[key] # This doesn't work; syntax error > } > end > end This particular case can be rewritten either with instance_eval or method_missing. Which is less evil is up to you. % cat series_eval.rb class Series attr_accessor :sid, :handle, :name def initialize(vals) vals.each_key { |key| instance_eval "@#{key} = vals[key]" } end end s = Series.new({"sid" => 3, "handle" => "smoon", "name" => "Sailor Moon"}) puts s.name # should print "Sailor Moon" % % ruby series_eval.rb Sailor Moon % cat series_missing.rb class Series def initialize(vals) @vals = vals end def method_missing (symbol, *args) @vals[symbol.to_s] end end s = Series.new({"sid" => 3, "handle" => "smoon", "name" => "Sailor Moon"}) puts s.name # should print "Sailor Moon" % % ruby series_missing.rb Sailor Moon % -- Ed