smalltalk中的字符串是否可变?

Bhu*_*dha 2 smalltalk squeak

1)string和之间的区别是什么string literal

2)一本书说'zero' at: 1 put: $h会失败,因为文字是不可变的,但如果我的确'zero' copy at: 1 put: $h有效,因为复制一个文字字符串会产生另一个不是文字的字符串.困惑!

aka*_*ice 5

想象一下,你有一个方法来回答一个文字字符串(字面意思是其内容在字面上用源代码编写)

MyClass>>constantString
    ^'foo'
Run Code Online (Sandbox Code Playgroud)

现在,如果此文字字符串是可变的,您可以巧妙地执行此代码段

MyClass new constantString at: 1 put: $b.
Run Code Online (Sandbox Code Playgroud)

然后MyClass的每个实例都会回答'boo'到#constantString.虽然,你无法理解为什么,因为源代码仍然表示'foo'.讨厌...

一些Smalltalk方言使这些文字字符串不可变,以避免这种意外的惊喜.有些人没有虚拟机支持不变性,而是让用户承担全部责任.