1)string和之间的区别是什么string literal
2)一本书说'zero' at: 1 put: $h会失败,因为文字是不可变的,但如果我的确'zero' copy at: 1 put: $h有效,因为复制一个文字字符串会产生另一个不是文字的字符串.困惑!
想象一下,你有一个方法来回答一个文字字符串(字面意思是其内容在字面上用源代码编写)
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方言使这些文字字符串不可变,以避免这种意外的惊喜.有些人没有虚拟机支持不变性,而是让用户承担全部责任.