7stud -- wrote: > You didn't learn your lessons very well. Look up what the method to_s > does. Does calling to_s on a string do anything? Experiment. > You're right, no sense to use it there - it was a leftover from my previous experiments that I forgot to remove. > > This isn't a Rails forum. > The question was purely ruby-related, the point is that my classes _are_ defined, and class definition is not a problem in this case. >> I came across .constantize after searching for const_get as phrogz >> suggested. > > If you are discarding the ruby solutions that were proffered in favor of > rails specific solutions, then why not just go to the rails forum? > > In any case, if you look at the definition of the constantize method, it > just calls the ruby method module_eval, and module_eval seems to act > like const_get in your situation, although module_eval can also do some > other things. Thanks for clarifying that - however, i was not discarding the Ruby solution, but rather picking one that seemed to be more suitable in my situation.... I could be wrong, of course - hence the "learning" part.... > > You don't seem to understand the difference between a variable name and > a string. The most obvious difference is that a string has quotes > around it. Yes, that was exactly one of the problems, which is why i had to use eval() - otherwise my subsequent .length method returned the number of characters in the string 'foo' as opposed as the number of items in the array foo[]. > The eval method says to treat a string as if it is ruby code. Ah! that makes sense now. thanks. > > However, you should avoid using eval whenever possible. First, it's > slow. Second, someone could enter a string that contains a command to > erase your hard drive. When you eval that string, poof! Good to know... i'm trying to rewrite it without using eval... it's just the only thing so far that seems to turn 'foo' into foo... >By the way, are you aware that your arrays can contain the class objects >themselves rather than strings: Yes, this is how i initially started. but then i ran into a reverse issue: i had to turn that class' name into a name of the array, one item of which would be passed as an option to each new instance of the class: class Item def initialize(x) @property = x end end class Dog < Item end class Flower < Item end class Circle < Item end #here are the arrays holding the future values of @property dog = ['jump', 'bark'] flower = ['red', 'yellow', 'blue', 'green'] circle = ['large', 'medium', small'] #and here's the array that holds class names arr = [Dog, Flower, Circle] #now, create instances of the 3 classes, #while reading the value for @property from the corresponding array, #to be set on each object's instantiation. #the result should be (in this case) 2 instances of Dog, 4 of Flower, and 3 of Circle, each instance with its own @property. arr.each do |a_class| length = 0 until length == a_class.length #<==== here's the problem. obj = a_class.new(:x => a_class[length]) #<=== and again. length += 1 end end so, my issue here then is translating a_class into its corresponding variable name for each iteration of arr.each, so that it reads the item number [length] from its corresponding array. the only way i could think of doing this is by using a_class.to_s.downcase, but of course ran into the problem of 1) a_class being a class, so to_s method won't return what I need, and 2) even if I were to somehow get the name of this class and managed to .to_s.downcase it, i'd have to use eval() again to make it a variable.... Thus, i had to populate my arr[] with lowercase strings, instead of the (more elegant) class names, like you suggest..... -- Posted via http://www.ruby-forum.com/.