On Fri, Apr 4, 2008 at 2:11 PM, Belorion <belorion / gmail.com> wrote:
> It was my understanding that the ||= assignment operator assigned the value
>  on the right-hand side if and only if the left hand side did not already
>  have a value:
>
>  irb(main):001:0> x = true
>  => true
>  irb(main):002:0> x ||= "ruby"
>  => true
>  irb(main):003:0> x
>  => true
>  And, likewise, with nil:
>
>  irb(main):014:0> x = nil
>  => nil
>  irb(main):015:0> x ||= "ruby"
>  => "ruby"
>  irb(main):016:0> x
>  => "ruby"
>  However, I do not understand this behavior:
>
>  irb(main):019:0> x = false
>  => false
>  irb(main):020:0> x ||= "ruby"
>  => "ruby"
>  irb(main):021:0> x
>  => "ruby"
>
>
>  We know that false != nil, and yet the ||= will assign if the left hand side
>  is false?
>
>  regards,
>  Matt

The operators are working with a three-valued logic.  In a comparison,
a FalseClass object or a NilClass object will be logistically false.

Todd