在smalltalk中创建字符串会发生什么?

pet*_*234 3 smalltalk object

我在Smalltak中是noobie,但我需要了解一些我的论文.创建字符串或任何其他对象时到底发生了什么?例如,让我们这样做:

fruit <- 'apple'
Run Code Online (Sandbox Code Playgroud)

当我尝试检查对象水果时,我发现它有5个真实的变种.如果我将'梨'分配给水果,它将有4个真正的变种.所以解释器创建了bytestring的新实例,为每个字符添加了必需的inst变量并为它们分配了适当的值?我相信还有更多事情发生,但我无法在任何地方找到它,我没有时间正确学习smalltalk.你能解释一下,或者给我一些我能找到的链接吗?

Dav*_*uck 5

字符串是对象.对象包含实例变量并响应消息.在Smalltalk中,基本上有两种实例变量:命名实例变量由名称引用(如Person对象中的name或phoneNumber),索引实例变量由数字引用.String使用索引的实例变量.

请考虑以下示例:

fruit := String new: 5.
fruit at: 1 put: $a;
    at: 2 put: $p;
    at: 3 put: $p;
    at: 4 put: $l;
    at: 5 put: $e.
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含5个字符空间的String.然后它获取fruit变量以指向该对象.然后它将5个字符写入字符串.结果是字符串'apple'.

由于字符串是如此常用,编译器支持在编译时创建字符串的特殊语法.

fruit := 'apple'
Run Code Online (Sandbox Code Playgroud)

在这个例子中,'apple'是一个String文字.Smalltalk编译器在编译行时创建字符串.运行该行时,您将使水果指向字符串'apple',该字符串包含5个包含Character对象的索引实例变量.