BOO大全/参考与物件
< BOO大全
参考与物件
编辑很重要的一件事情,你必须记得,指定物件给变数并没有发生复制的动作。所以可以有很多变数参考到同一个物件。
>>> a1 = (1,2,3) (1, 2, 3) >>> a2 = a1 (1, 2, 3) >>> a2[0] = 0 0 >>> a1 (0, 2, 3)
在处理数值型别时,就不是如此了,因为与复制数值(通常只有4或8个bytes)比起来,复制大的物件的代价是很昂贵的。你可以在 Boo 里定义自己的值型别,当然你得有个好理由。
如果两个物件相等,这意味着他们可能是相同的物件,或是他们有相同的内容。is运算子可以告诉你这两个参考是否一样:
>>> l1 = [1,2,3] [1, 2, 3] >>> l2 = l1 [1, 2, 3] >>> l3 = [1,2,3] [1, 2, 3] >>> l1 == l3 true >>> l1 is l3 false >>> l1 == l2 true >>> l1 is l2 true
有时候你想作的是复制物件,阵列有个Clone方法,但串列却没有(这是个败笔吗?):
>>> a3 = a1.Clone() (1, 2, 3) >>> a3 == a1 true >>> a3 is a1 false >>> l1 = [1,2,3] [1, 2, 3] >>> l2 = l1.Clone() ------------^ ERROR: 'Clone' is not a member of 'Boo.Lang.List'. >>> l2 = l1[:] [1, 2, 3]
还记得前面提过的 Slicing 吗? l1[:] 表示取得串列的所有元素,这样就能复制整个串列了,这个技巧在所有可以 slicing 的型别上都适用,像字串、串列、阵列都行。