我是 Smalltalk 的新手,是在 Squeak 中学习的。但是我发现 Smalltalk 中有很多令人困惑的地方。在Squeak,MetaClass
和MetaClass class
互为对方的班级。如果我想创建对象MetaClass
,我应该向它的类发送一条消息new
,即MetaClass class
. 但它必须首先作为对象存在才能接受消息。所以我必须先创建对象MetaClass class
,这只能通过向尚未创建new
的对象发送消息来完成。MetaClass
所以这是一个先有鸡还是先有蛋的问题。
当然我现在可以在 Squeak 中创建对象,因为MetaClass
和MetaClass class
对象已经在 Squeak 打开时自动创建。但我不知道怎么做。也许它们是通过发送消息以某种方式创建的。但它与 Smalltalk 的精神相矛盾:除了少数几点(变量声明、赋值、返回和原语)之外,一切都是通过发送消息来发生的。
上面的推理有问题吗?提前致谢。