我之前就在學(xué)習(xí)Python,而Python自己也說了自己是一門純粹的面向?qū)ο笳Z言.包括int類型都是對象.
所謂面向?qū)ο缶褪且妙愋?然而今天看了一篇有關(guān)Swift的有關(guān)struct還是使用class的文章,讓我覺得認(rèn)知上需要小心又謹(jǐn)慎.
文章中這么寫到的:
大部分語言沒有類似 struct 結(jié)構(gòu)體的東西。像 Python 和 JavaScript 這樣“一切皆對象”的語言都只有引用類型。如果你是從這樣的語言轉(zhuǎn)到 Swift,值類型這個概念可能對你來說更加陌生。
不過等一下!有一個地方幾乎所有的語言都會使用值類型:數(shù)值(number)!
然后我迫不及待的就在VSCode中寫下了如下的簡單代碼
x1 = 1
x2 = x1
x1 = x1 + 1
print("x1:{}".format(x1))
print("x2:{}".format(x2))
按照面向?qū)ο蠖际且脤ο筮壿?x1和x2是指向同一個指針,那么x1 + 的變化必然也會影響到x2
根據(jù)這個理論,預(yù)期的打印結(jié)果應(yīng)該是:
x1:2
x2:2
然而實際的結(jié)果是:
x1:2
x2:1
最后文章是這么解釋的:
由于許多語言的核心是“一切皆對象”,number 其實是用引用類型來實現(xiàn)的。然而,它們是不可變引用類型,不可變引用類型和值類型的差異是很難察覺的。它們的行為和值類型一樣,即使它們不是以這種方式實現(xiàn)。
原文如下:
何時用 struct?何時用 class?