Alle Sunday 16 November 2008, Adam Akhtar ha scritto: > Tried my best to make this title as informative as possible but its > ended up a bit cryptic. > > Say I have a class Record which represents records in a database and a > particular object has these instance variables > > @a = 1 > @b = 2 > @c = 3 > > > Id like to be able to create a hash that has the varible names i.e. > a,b,c as keys and then their values as the hash values. > > > e.g. {a=>1, b=>2, c=>3} > > HOWEVER i would like this to be done dynamically so that if I add or > remove variables to my class definition the conversion method will > include these without me having to hard code them in the conversion > function. > > > Is this possible and if so what topic would this come under in a book? > Any tips or code snippets would be greatly appreciated. The method instance_variables returns an array containing the names of all the instance variables of the receiver (including the leading @). The instance_variable_get method, instead, returns the value of the instance variable whose name is passed as argument. To do what you want, you can do the following: res = {} instance_variables.each{|v| res[v[1..-1]] = instance_variable_get(v)} res Here's a full example: class C def initialize @x = 1 @y = 2 @z = 3 end def create_hash res = {} instance_variables.each{|v| res[v[1..-1]] = instance_variable_get(v)} res end end p C.new.create_hash => {"x"=>1, "y"=>2, "z"=>3} I hope this helps Stefano