From: Logan Capaldo Date: 2006-03-02T04:12:17+09:00 Subject: Re: Create named objects --Apple-Mail-13--275638156 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed On Mar 1, 2006, at 11:33 AM, kgoblin@gmail.com wrote: > > Roland Schmitt wrote: >> Hello, >> >> want to do the following: >> >> name = "input" >> clazz = "String" >> value = "test" >> >> <<>> >> >> puts(input) -> "test" >> input.class() -> String >> >> >> Thanks in advance, >> >> Roland > > a pretty straight forward way is to just use the eval function on a > string > > # in your insert magic here: > evs = "#{name} = #{clazz}.new( #{value} )" > eval( evs ) alternatively: name = "input" clazz = "String" value = "test" (class << self; self; end).class_eval { define_method(name) { const_get(clazz).new(value) } } puts(input) puts input.class There are several disadvantages to this approach. 1) input is a method not really a variable and therefore its scope is gonna be all sorts of wrong 2) Since it is a method, assigning to it is not necessarily going to work the way you want Advantages ares that yo don't have to worry about the having seen an assignment to it business and you don't have to invoke the parser Yet another method would be instance_variable_set("@#{name}", Object.const_get(clazz).new(value)) Unfortunately now you have to refer to it as @input. It also has some scoping issues. --Apple-Mail-13--275638156--