我是Smalltalk的新手,并在Squeak中学习了它。但是我发现Smalltalk中有很多令人困惑的地方。在Squeak中,MetaClassMetaClass class彼此是彼此的类。如果要创建对象MetaClass,则应向其类new发送消息MetaClass class。但是它首先必须已经作为对象存在,才能接受该消息。因此,我必须首先创建对象MetaClass class,这只能通过向尚未创建的对象new发送消息MetaClass来完成。因此,这是个鸡或蛋的问题。

当然,我现在可以在Squeak中创建对象,因为打开Squeak时已经自动神奇地创建了MetaClassMetaClass class对象。但是我不知道如何。也许通过某种方式创建它们,而不是通过发送消息来创建它们。但这却与Smalltalk的精神背道而驰:除了少数几点(变量声明,赋值,返回和原语)外,一切都通过发送消息来实现。

上述推理有问题吗?提前致谢。

最佳答案

“自动创建”过程实际上称为bootstrapping。这就是解决鸡和蛋问题的方法。一旦启动了系统,其余所有内容都可以根据系统本身来表示。因此,与Smalltalk的哲学是不矛盾的,即一切都是通过发送消息来进行的,因为一旦启动,它就变成了Smalltalk系统。

关于oop - Smalltalk中的不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17176380/

10-11 18:39