On Sun, Apr 3, 2011 at 9:58 PM, wolf volpi <wolf_volpi / yahoo.com> wrote:

> What does the pipe in this example do?
>
>  @first_name = @first_name || ''
>
> According to the text book that this example came from, the code ensures
> that an instance variable is not nil.  If @first_ name is nil, @first_
> name is set to the empty string.
>
> Thank you.
>
> --
> Posted via http://www.ruby-forum.com/.
>
>
1) In Ruby, false and nil are treated as falsy. Everything else is treated
as truthy.

"truthy" if nil         # => nil
"truthy" if false       # => nil
"truthy" if true        # => "truthy"
"truthy" if "str"       # => "truthy"
"truthy" if 1           # => "truthy"
"truthy" if 1.23        # => "truthy"
"truthy" if /regex/     # => nil
"truthy" if :symbol     # => "truthy"
"truthy" if 'r'..'ange' # => "truthy"


2) Boolean operators return the objects themselves. In an "or" (double
pipes), if the first value is falsy, the second value is returned. If the
first value is truthy, it is returned.

nil   || "b"    # => "b"
false || "b"    # => "b"
"a"   || nil    # => "a"
"a"   || false  # => "a"
"a"   || "b"    # => "a"
nil   || nil    # => nil
nil   || false  # => false
false || nil    # => nil
false || false  # => false

3) For some reason that I don't know (probably interpreter magic) an
uninitialized variable can be referenced in a boolean equation and it will
evaluate to nil.

first_name = first_name || "" # => ""
first_name = "josh"
first_name = first_name || "" # => "josh"


So, it will set the variable to the empty string, if the variable is
undeclared, or false , or nil.