On Tue, Nov 8, 2011 at 08:27, Fily Salas <fs_tigre / hotmail.com> wrote:

> Can someone explain the use of double pipes "||" in Ruby?

It's the logical "or" operator.

> Are these part of blocks only?

The pipes that surround block arguments are a different beastie entirely.

> Where else can double pipes be used?

Mainly in combining boolean values.  Say you want to do something if
some number is *not* in the positive two-digit range (leading zeroes
don't count).  You would do:

  if mynum < 10 || mynum > 100
    # do whatever
  end

> The way I understand it, is basically for adding temporary variables to
> help identify items in an array, other than that I'm not sure
> where else can they be used.

That's not the main usage, it's just a handy trick.  When you see the
construction:

  arr[x] ||= y

what that's really saying is "evaluate arr[x], and if that's false
(which could be either the actual boolean value of false, or it could
be nil, such as if no value was assigned there), put y there, else
leave it alone".  Despite the usual meaning of tacking an = sign onto
any operator, it's not *quite* equivalent to:

  arr[x] = arr[x] || y

which *will perform an assignment* in either case.  The previous one
will not, if arr[x] already had a (non-false) value.  IIRC, one of the
popular Ruby podcasts recently covered a recent post about this on one
of the popular Ruby blogs.  In trying to remember it I'm hearing it in
Peter Cooper's voice so it was probably on The Ruby Show, but I don't
think it was his blog, maybe Virtuous Code by Avdi Grimm.

Alternately you might see:

  x = y || z

This *could* be boolean math, or it could be "if y is not false (or
nil) assign it to x, else assign z to x".

You might be getting confused because Ruby also has "and" and "or"
keywords, but these are subtly different, suitable *only* for use in
boolean manipulation, and usually better off forgotten.

-Dave

-- 
LOOKING FOR WORK! What: Ruby (on/off Rails), Python, other modern languages.
Where: Northern Virginia, Washington DC (near Orange Line), and remote work.
See: davearonson.com (main) * codosaur.us (code) * dare2xl.com (excellence).
Specialization is for insects. (Heinlein) - Have Pun, Will Babble! (Aronson)