Tuesday, October 11, 2011

Variables as reference to objects

Variables are used to hold references to objects. As previously mentioned, variables themselves have no type, nor are they objects themselves; they are simply references to objects.
x = "abc"

An exception to this is that small immutable objects of some built-in classes, such as Fixnum, are copied directly into the variables that refer to them. (These objects are no bigger than pointers, and it is more efficient to deal with them in this way.) In this case assignment makes a copy of the object, and the heap is not used.
Variable assignment causes object references to be shared.
y = "abc"
x = y
x # "abc"

After executing x = y, variables x and y both refer to the same object:
x.object_id     # 53732208
y.object_id # 53732208

If the object is mutable, a modification done to one variable will be reflected in the other:
x.gsub!(/a/,"x")
y # "xbc"

Reassigning one of these variables has no effect on the other, however:
# Continuing previous example...
x = "abc"

y # still has value "xbc"

No comments:

Post a Comment