subclass: 是 Squeak 中的普通方法吗?
Is subclass: an ordinary method in Squeak?
似乎在 Squeak 中创建一个新的 subclass 是通过向 super class 发送消息来完成的 class:
Object subclass: #Boolean
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-Objects'
在哪里可以看到这个方法的实现?我在 Object
和 ProtoObject
的 class 方法列表中都找不到它。
是的,这是一条普通消息。实现在名为 Class
的 class 中。您可以通过在任何 class 定义中选择消息名称(例如您在问题中发布的那个)并调用 "implementors of it" 操作(Cmd-m,或者如果您在弹出菜单中)来找到它的实现单击时按住 shift 键)。
您会发现它委托给了 ClassBuilder,您可以在其中看到新的 classes 是如何产生的。
请注意,您将消息 发送到 class 对象,而不是对象的实例。这就是为什么您没有在 Object
或 ProtoObject
中找到方法的原因。你宁愿要查找Object class
中的方法,它是Object的元class,它继承自Class
。
似乎在 Squeak 中创建一个新的 subclass 是通过向 super class 发送消息来完成的 class:
Object subclass: #Boolean
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-Objects'
在哪里可以看到这个方法的实现?我在 Object
和 ProtoObject
的 class 方法列表中都找不到它。
是的,这是一条普通消息。实现在名为 Class
的 class 中。您可以通过在任何 class 定义中选择消息名称(例如您在问题中发布的那个)并调用 "implementors of it" 操作(Cmd-m,或者如果您在弹出菜单中)来找到它的实现单击时按住 shift 键)。
您会发现它委托给了 ClassBuilder,您可以在其中看到新的 classes 是如何产生的。
请注意,您将消息 发送到 class 对象,而不是对象的实例。这就是为什么您没有在 Object
或 ProtoObject
中找到方法的原因。你宁愿要查找Object class
中的方法,它是Object的元class,它继承自Class
。