Swift数组赋值为什么不一致(既不是引用也不是深度复制)?
Swift数组赋值为什么不一致(既不是引用也不是深度复制)?
我正在阅读文档,有些语言设计决定让我不停地摇头。但真正让我困惑的是如何处理数组。
我赶紧去游乐场试一试。你也可以尝试一下。第一个例子:
var a = [1, 2, 3] var b = a a[1] = 42 a b
在这里,a
和b
都是[1,42,3]
,我可以接受。数组被引用了 - 没问题!
现在看看这个例子:
var c = [1, 2, 3] var d = c c.append(42) c d
c
是[1, 2, 3, 42]
,但d
是[1, 2, 3]
。也就是说,在上一个示例中看到了改变,但在这个示例中没有看到,文档说这是因为长度改变了。
现在,这个怎么样:
var e = [1, 2, 3] var f = e e[0..2] = [4, 5] e f
e
是[4, 5, 3]
,很酷。有一个多索引替换很好,但是f
仍然没有看到改变,即使长度没有改变。
因此,总结一下,如果改变了1个元素,则对数组的常见引用会看到更改,但如果改变多个元素或附加项,则会进行复制。
对我来说,这似乎是一个非常糟糕的设计。我这样想对吗?我看不出数组应该像这样行动的理由吗?
编辑:数组已更改,现在具有值语义。更合理!
admin 更改状态以发布 2023年5月21日