On Mon, Jun 16, 2003 at 06:10:49AM +0900, Markus Jais wrote: > Hello > > I have this code: > > country = Struct.new("france".intern, :person) this doesn't seem right, should be Struct.new(:name, :person) but then again, the association "a country has a name and a person" is quite strange, I'd look for a better name instead. > person_class = Struct.new("person".intern) > > > meth = <<-METHOD > def method > @person = @person_class.new > end > METHOD Why are you using the evil arts? :-) You could just use a constant for each class and write the method right away with class SomeClass def method #... end end If you don't want to pollute the namespace in Object wrap everything in a module. Plus you should be passing an argument to the constructor, otherwise the corresponding iv. gets initialized to nil. > country.class_eval(meth) > > c = country.new() > c.method() > > this is my error message: > ../temp.rb > (eval):2: warning: instance variable @person_class not initialized > (eval):2:in `method': undefined method `new' for nil (NoMethodError) > from ./temp.rb:17 > > > the one that bothers me is the first one with "@person_class not > initialized" You didn't create the instance variable at all: person_class is a local belonging to the outer scope. You can use $person_class (ugly) or better simply a constant: Person. Country = Struct.new(:name, :person) Person = Struct.new(:person) You can then work your way with class_eval, but in the example you gave it's useless. > is it possible to do this ?? I am not sure if this could work at all. > I also tried > "@person_class.name" + ".new" There's no way this will work, for * @person_class is not initialized * its value is nil * it doesn't understand message :name * even if it did, "some string" + "some other" does nothing but return the concatenation of both strings, not eval it * and were it to work in some parallel universe, you'll normally want to pass and argument to the constructor. > but @person_class.name does return an empty string. -- _ _ | |__ __ _| |_ ___ _ __ ___ __ _ _ __ | '_ \ / _` | __/ __| '_ ` _ \ / _` | '_ \ | |_) | (_| | |_\__ \ | | | | | (_| | | | | |_.__/ \__,_|\__|___/_| |_| |_|\__,_|_| |_| Running Debian GNU/Linux Sid (unstable) batsman dot geo at yahoo dot com And Bruce is effectively building BruceIX -- Alan Cox