我之前就在学习Python,而Python自己也说了自己是一门纯粹的面向对象语言.包括int类型都是对象.
所谓面向对象就是引用类型,然而今天看了一篇有关Swift的有关struct还是使用class的文章,让我觉得认知上需要小心又谨慎.
文章中这么写到的:
大部分语言没有类似 struct 结构体的东西。像 Python 和 JavaScript 这样“一切皆对象”的语言都只有引用类型。如果你是从这样的语言转到 Swift,值类型这个概念可能对你来说更加陌生。
不过等一下!有一个地方几乎所有的语言都会使用值类型:数值(number)!
然后我迫不及待的就在VSCode中写下了如下的简单代码
x1 = 1
x2 = x1
x1 = x1 + 1
print("x1:{}".format(x1))
print("x2:{}".format(x2))
按照面向对象都是引用对象逻辑,x1和x2是指向同一个指针,那么x1 + 的变化必然也会影响到x2
根据这个理论,预期的打印结果应该是:
x1:2
x2:2
然而实际的结果是:
x1:2
x2:1
最后文章是这么解释的:
由于许多语言的核心是“一切皆对象”,number 其实是用引用类型来实现的。然而,它们是不可变引用类型,不可变引用类型和值类型的差异是很难察觉的。它们的行为和值类型一样,即使它们不是以这种方式实现。
原文如下:
何时用 struct?何时用 class?