From: Robert Klemme Date: 2007-01-27T21:00:05+09:00 Subject: Re: pass by reference? On 27.01.2007 12:10, dblack@wobblini.net wrote: > 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? I probably should have chosen different variable names. I was trying to make the point, that you cannot change a variable in bar by assigning in foo. Kind regards robert