我是 Smalltalk 的新手,是在 Squeak 中学到的。但是我发现 Smalltalk 中有很多令人困惑的东西。在吱吱声中,MetaClass
和 MetaClass class
互相都是对方的类(class)。如果我想创建对象 MetaClass
我应该发消息new
到它的类是 MetaClass class
.但是它必须首先作为对象存在才能接受消息。所以我必须创建对象 MetaClass class
首先,这只能通过发送消息 new
来完成到对象 MetaClass
尚未创建。所以这是一个先有鸡还是先有蛋的问题。
当然我现在可以在 Squeak 中创建对象,因为 MetaClass
和 MetaClass class
当 Squeak 打开时,对象已经自动创建。但我不知道怎么做。也许它们是通过发送消息以某种方式创建的。但是这与 Smalltalk 的精神相矛盾:除了少数点(变量声明、赋值、返回和原语)之外,一切都是通过发送消息来发生的。
上面的推理有什么问题吗?提前致谢。
最佳答案
“自动创建”过程实际上被称为 bootstrapping .这就是解决鸡和蛋问题的方法。一旦系统被引导,其余的都可以用系统本身来表达。因此,这与 Smalltalk 的哲学没有矛盾,即一切都通过发送消息发生,因为它只有在引导后才成为 Smalltalk 系统。
关于oop - 闲聊中的矛盾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17176380/