On 12/2/05, Chris Irish <chris.irish / libertydistribution.com> wrote: > I just read a FAQ page online about Ruby symbols and someone mentions this > > Also, the entirely realistic reasoning for using symbols: If you > are going to refer to a method name, use a symbol. Because by > defining the method, the symbol exists anyway. > > Can someone show me an example of this? Is this referring to the method > of a class? It simply comes down to this. When you define a method the method definition is saved away and connected to a lookup table for the object you defined the message on. The key into that lookup table? A symbol representing the method's name. So if I define: def hello puts "Hello, world!" end The body is complied into a Method object, and that Method object is then attached to the current self (Kernel, is you're not in anything else) with the symbol :hello as the key. After defining the above, try this: send(:hello) Anytime you make a method call, it's essentially just an invocation of send with the method name and arguments as paramenters. (Well, it's a little more complicated, but that's why I said "essentially".) Anyways, the point of the quote from the FAQ is that just be defining the method hello, the symbol :hello already exists, since it's used to index the receiver's method table. So, if you're going to be passing the method name around (common with metaprogramming), you save by using the already existing :hello symbol, instead of creating a new "hello" String object. I hope that makes sense... Jacob Fugal