subclass: 是 Squeak 中的普通方法吗?

Art*_*ium 2 smalltalk squeak

在 Squeak 中创建一个新的子类似乎是通过向超类发送消息来完成的:

Object subclass: #Boolean
    instanceVariableNames: ''
    classVariableNames: ''
    poolDictionaries: ''
    category: 'Kernel-Objects'
Run Code Online (Sandbox Code Playgroud)

在哪里可以查看该方法的实现?我在Object's 或ProtoObject's 的类方法列表中找不到它。

Jay*_*ayK 6

是的,这是一条普通的消息。实现位于名为 的类中Class。您可以通过在任何类定义(如您在问题中发布的那个)中选择消息名称来找到它的实现,并调用“它的​​实现者”操作(Cmd-m,或者如果您在单击时按住 shift 键,则在弹出菜单中)。

您会发现它委托给 ClassBuilder,在那里您可以看到新类是如何产生的。

请注意,您将消息发送到Object类,而不是 Object 的实例。这就是为什么您没有在Objector 中找到方法的原因ProtoObject。您宁愿必须在 中查找方法Object class,它是 Object 的元类,它继承自Class。