Hi --

On Sat, 27 Jan 2007, Robert Klemme wrote:

> On 27.01.2007 01:43, dblack / wobblini.net wrote:
>> Hi --
>> 
>> On Sat, 27 Jan 2007, Martin C. Martin wrote:
>> 
>>> Phrogz wrote:
>>>> If you pass an immutable type by reference, does it make a sound?
>>>> Er, I mean...
>>>> If you passed an immutable type by reference, how would you know that
>>>> it wasn't passed by value?
>>> 
>>> Is there any way for the function you're calling to modify the value of 
>>> the variable in the caller?  Pass by reference can do that.
>> 
>> You can modify the object to which the variable refers:
>>
>>   def change_me(obj)
>>     obj << "hi"
>>   end
>>
>>   arr = [1,2,3]
>>   change_me(arr)
>>   p arr          # [1, 2, 3, "hi"]
>> 
>> In this example, arr contains a reference to an array.  In change_me,
>> obj contains another copy of the same reference, so you can use it to
>> manipulate and change the original array.
>> 
>> I still wouldn't call this pass by reference (see my earlier post in
>> this thread).
>
> Absolutely right: Ruby uses pass by value - with references.
>
> irb(main):004:0> def foo(x) x = 10 end
> => nil
> irb(main):005:0> def bar; x = 20; foo(x); x end
> => nil
> irb(main):006:0> bar
> => 20
> irb(main):007:0>

I'm not sure that demonstrates the "values that are references" thing,
though.  You're reassigning to x in foo, which creates a new local x;
but I think that's just part of the assignment semantics.  Or are you
assuming that if pass by reference were involved, then assignment
would work differently?


David

-- 
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
    (See what readers are saying!  http://www.rubypal.com/r4rrevs.pdf)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)