On Sat, Aug 14, 2010 at 9:17 AM, Chan Nguyen <cnguyen / rapattoni.com> wrote:
> Hi everyone,
> In C++, in order to modify a variable being passed into a function we do
> [code]
> void func( int& x )
> {
>   > }
> [/code]
>
> I wonder is there a way to do something like this in Ruby or a similar
> idea? If there's no reference type then how would we be able to modify a
> varible?

In Ruby a variable is a reference to an object, and when you call a
method passing the variable as a parameter, what the method gets it's
a copy of the reference, so you can't modify a variable inside a
method. That means, changing which object the variable refers to:

def change(arg)
  arg = "another thing"
end

a = "a string"
change(a)

a would still be referencing "a string", because arg inside the method
is a copy of the reference. The usual way is to have the method return
the new value and assign it:

def change(arg)
  "a better #{arg}"
end

a = "a string"
a = change(a)

or to use mutable methods:

def change(arg)
  arg.replace("a better #{arg}")
end

a = "a string"
change(a)

This works because you are not changing which object is referenced by
a, but you change the internal state of that object.

Jesus.