Wednesday, April 18, 2007

Ruby中的变量,引用和对象

#Ruby变量保持对对象的引用并且 = 操作符拷贝引用.同时,例如a += b的自赋值实际上被翻译为a = a + b. 因此意识到在某个操作中你事实上是创建了新的对象还是修改了一个现存的对象是明智的.
#例如, string << "another" 比 string += "another" 更安全(不创建额外对象), 所以如果它存在的话你使用任何类定义的(class-defined)更新方法(update-method) 应该更好(如果那是真是你的意图). 然而,也要注意关连同一个对象的所有其他变量上的"副作用":

a = 'aString'
c = a
a += ' modified using +='
# 相当于 a = a + ' modified using +=', 重新赋值给新变量a, 这不会改变前面的c值(引用原先a值)
puts c # -> "aString"

a = 'aString'
c = a
a << ' modified using <<'
puts c # -> "aString modified using <<"
# 这个直接就改变了a本身的值,没有新建对象(string << "another" 比 string += "another" 更安全(不创建额外对象)),而c只是a的引用,所以c的值也变化了。

No comments :