On Wednesday 28 December 2005 03:00 pm, James Edward Gray II wrote: > On Dec 28, 2005, at 1:47 PM, Steve Litt wrote: > > On Wednesday 28 December 2005 02:32 pm, Alex Knaub wrote: > >> 2005/12/28, Surgeon <biyokuantum / gmail.com>: > >>> Hi, > >>> > >>> I am a Ruby newbie. I wish I didn't post such a simple question here > >>> but I had to. > >>> What is the difference between :foo (a keyword) and "foo"(a string). > >>> Can they be used interchangeably? Are they fundamentally same and is > >>> the only difference performance? > >> > >> http://onestepback.org/index.cgi/Tech/Ruby/ > >> SymbolsAreNotImmutableStrings.re > >> d > > > > The preceding URL tells me unequivically that symbols aren't > > strings, but > > really doesn't tell me too much about what they are, other than what, > > names??? > > As one of the people guilty of saying what that article says we > shouldn't, I better try to get back in Jim's good graces by answering > this one... ;) > > > I still don't understand why it's > > > > attr_reader :fname, :lname > > > > instead of > > > > attr_reader @fname, @lname > > > > How does attr_reader know that :fname corresponds to @fname. Seems > > like magic > > to me. > > Attributes of a class logically correspond to instance variables in > many cases, don't you think? Ruby's just making that assumption for > you. > > When I see: > > some_call @my_variable > > I expect what is held inside of @my_variable to get passed to > some_call(), not the variable name itself. Oh, I get it!!! In see itwould be some_call(&@my_variable), and in ruby it's some_call(:my_variable). One thing -- why not some_call(:@my_variable)? > What you describe would > be the opposite and that would surely surprise a lot of people. > > Furthermore, Symbols are commonly used to refer to method names (as > Ruby uses them for this internally). That's really what we are doing > here, creating new methods by name, so it's a good fit. Ah ha! That's why I need to pass callback routines entry and exit that occur in object cb, like this: walker = Walker.new(node, cb.method(:entry), cb.method(:exit)) SteveT Steve Litt http://www.troubleshooters.com slitt / troubleshooters.com