Sam Kong asked:
> One more think to clear up.
>
> f.send(:foo) #<- is :foo a symbol like an instance of Symbol or just a
> generic symbol?
> If :foo is not an instance of Symbol, then ':' is used for 2 kinds of
> things in Ruby, right?

:foo is an instance of Symbol

% irb
irb(main):001:0> :foo.is_a? Symbol
=> true

The colon (:) prefix is Ruby for a literal Symbol, just like surrounding 
something in quotes (" or ') gives a String, or slashes (/) gives a Regexp.

You can of course assign it to a variable like any other object:
  x = :foo
  f.send(x)

A "symbol" in context of the parser, like from your Pickaxe quote, has 
nothing to do with programming Ruby, it's just used to denote a name or 
identifier. See how the passage you quote starts: "When Ruby sees a name 
such as a in an expression" - it's just talking about a word in your code 
that looks like a variable name or a method name.

HTH,
Dave