> Well, what I'm basically trying to figure out is how to change the a > class into another class. Heres my new struct.rb: > #!/usr/bin/env ruby > class Hash > def to_struct(struct_name) > Struct.new(struct_name,*keys).new(*values) > end > end > > class User > def initialize(sn, pw, dob) > vars = {:screenname => sn, > > :password => pw, > :dob => Time.parse(dob), > :join_date => Time.now, > :age => Time.now.year - Time.parse(dob).year} > > return vars.to_struct("User") > end > end > > Now when I call User.new, I want it to turn the User class into the > 'vars' Structure I'm not sure whether your approach will do what you want (if I understand you correctly), for several reasons: 1) your to_struct method will attempt to create a new class called struct_name every time it is called. This will produce a warning about redefining a constant if it is called more than once with the same parameter. 2) the to_struct method will return an instance of class Struct::User (the name of the class is struct_name), which is just another class, only with the [] method added. 3) the return value of the initialize method is always ignored. If you wanted User.new to return the value returned by User#initialize, you need to redefine User.new. If you do, though, you won't be able to access the new user object. Look at this: class C def C.new(var) obj = allocate return obj.send(:initialize, var) #initialize is private end def initialize var @var = var @var * 2 end end c = C.new(3) puts c => 6 Now, you have no variable containing the instance of C you just created. I think you can use an OpenStruct instead of a Struct. OpenStruct is like a hash, but you can access items using method notation. Since OpenStruct can be initialized with a hash, you can define your to_struct method like this: require 'ostruct' class Hash def to_struct OpenStruct.new self end end If you truly need to use a Struct, you should first check whether a class with that name is already defined, and create it only if it isn't. For instance: class Hash def to_struct name cls = Struct.const_get(name) rescue Struct.new( name, *keys) cls.new *values end end I hope this helps Stefano