From: Hal Fulton Date: 2006-02-24T14:08:31+09:00 Subject: Re: Everything's an object, right? Nathan Morse wrote: > What about when I don't use String#+ ? Look at it this way. You're not "passing by reference." You're passing references by value. :) Learn to distinguish between variables and objects. The former are merely "labels" if you will. a = b = c = "hello" # three variables, one object Then remember that assignment always "wipes out" the old reference. Assignment doesn't change the old object at all. a = b = "hi" # a and b both refer to "hi" a = "bye" # but now a refers to "bye" So assigning a variable is different from changing an object. Look at this: a = b = "hi" b[0] = "f" p a # "fi" We're changing the *object* referred to by b (which is the same one referred to by a). We're not making b refer to a different object. Or check this out. Both result in the value "foobar" -- but there is a difference. a = "foo" b = "foo" p a.object_id # -542440758 p b.object_id # -542444578 a << "bar" b += "bar" p a.object_id # -542440758 p b.object_id # -542466128 (a new object!) Does this help any? Hal