我从未使用过 Smalltalk,但我已经阅读了很多关于它的内容,而且它总是让我很感兴趣。我已经看到了程序正在运行的很酷的演示,并且只需更改程序对象正在使用的类的方法就可以改变正在运行的程序的行为。它显然是强大的东西,我理解它是如何工作的。我似乎无法确定的是,当您想要添加、删除或重命名该类的实例变量时,该类的现有实例会发生什么。
我无法想象如何更改所有类在正在运行的程序中使用的实例变量,并且仍然期望该类的现有实例在之后正常运行。也许我正在添加一个需要初始化的新实例变量,并且以前存在的方法已更改为依赖于该变量。难道我不能以具有该类的实时实例的任何正在运行的代码出现可怕的故障而告终吗?或者,如果实例变量的含义发生了变化,而我现在希望在其中存储与以前不同类型的对象怎么办?是否有某种“升级”机制?还是让之前的实例崩溃和烧毁的通常做法是什么?或者这仅仅是“我们不”的一个例子
我能想到的唯一合理干净的方法是,当您更改实例变量定义时,它可能实际上创建了一个全新的类,而旧实例在更改之前继续使用旧类定义(现在是由于名称已重新定义为新的类定义,因此无法按名称访问)。也许这是最合乎逻辑的解释——但由于我还没有找到任何可以直接解释这个过程的东西,我想我会在这里问一下,看看什么样的有趣信息让我受益匪浅。:)