dblack / wobblini.net wrote:
> Hi --
>
> On Thu, 13 Jul 2006, Dominic Son wrote:
>
>> Hi. I'm confused as to why this variable* is nessesary:
>>
>> -----------
>>
>> def add_product(product)
>>
>> existing_product = @items.find {|item| item.product == product}
>>
>>    if existing_product
>>    existing_product.increment_quantity
>>
>>        else
>>        existing_product = CartItem.new(product)
>>        @items << existing_product
>>
>>    end
>>
>>  existing_product*
>>
>> end
>>
>> --------------
>>
>> i'm a newb, and to a newb, i can't understand why a var just sits there.
>> can someone please explain what the purpose of exisiting_product* is?
>>
>> i'd figure exisiting_product* wouldn't be needed since on the 2nd line,
>> existing_product is initialized with @items.find..blahblahblah..
>
> The last line is equivalent to:
>
>   return existing_product
>
> If there's no explicit "return" statement, then the method returns the
> value of the last expression evaluated -- which, in this case, is:
>
>   existing_product
>
>
> David
>
Well, I don't know how other feels, but I'd put it in another way: In
Ruby the value of a sequence of expressions is the last expression. Now,
the return value of a function is the value of its content ... thus the
value of its last expression. "return" is, in ruby, only useful if you
want to return from the function before the end of the body of the
function (like break in an iterator will interrupt the iteration
returning the value after the break).

Pierre