From: Austin Ziegler Date: 2005-09-28T06:58:54+09:00 Subject: Re: Dynamically generating classes? On 9/27/05, Jonas Galvez wrote: > In Python I can do this: > >>> def create_class(name): > ... import new > ... c = new.classobj(name, tuple([object]), {}) > ... def __init__(self, value): > ... self.value = value > ... setattr(c, "__init__", new.instancemethod(__init__, None, c)) > ... return c > ... > >>> MyClass = create_class("MyClass") > >>> > >>> obj = MyClass(value=10) > >>> print obj.value > 10 > > Is there anything similar in Ruby? Or do I need to use eval()? def create_class(parent = nil) if parent klass = Class.new(parent) else klass = Class.new end klass.class_eval do def initialize(value) @value = value end attr_reader :value end klass end MyClass = create_class obj = MyClass.new(10) puts obj.value The only difference is that the class's name is based on the first constant it's given to. That's a bit of RubyMagic. -austin -- Austin Ziegler * halostatue@gmail.com * Alternate: austin@halostatue.ca