我们如何从另一个类方法调用类方法?

时间:2014-12-10 15:11:25

标签: smalltalk squeak

从另一个类方法调用类方法的正确方法是什么?

是吗

  className methodName

   self methodName

    className class methodName

当我们不创建类的实例时,我们可以使用self吗?

2 个答案:

答案 0 :(得分:3)

如果您从同一个班级中调用它,则需要使用self methodName。在Smalltalk类中是一个对象本身,因此类方法中的self methodName将消息发送给self,即类对象。

这也有利于在继承期间保持一致性。想象一下,您有SuperClassSubClass。然后,如果您在self methodName中的某处使用SuperClass,那么在SubClass中它将等同于SubClass methodName,因为执行该方法的对象将是SubClass对象。现在,如果您对SuperClass methodName进行硬编码,那么它将在子类中相同,这可能不是您所期望的。

如果您要className class methodName,您将向className class对象发送一条消息,该对象是Metaclass的一个实例,这可能与您的预期完全不同。

这是一张显示Smalltalk层次结构核心概念的图片。 (空心箭头是遗传)。

Smalltalk class hierarchy

长话短说:

如果你有

SomeClass class >> #someMethod
    "do something"

然后你应该使用

SomeClass class >> #otherMethod
    self someMethod

OtherClass class >> #otherMethod
    SomeClass someMethod

第二种情况适用于第一种情况,但首先从设计观点出发通常会更好。

答案 1 :(得分:1)

使用self被认为更好,因为您可以避免在任何地方重复使用类名。至于其他的是否有效,请尝试让我们知道;)在图像中编译和运行单行方法比在SO上询问更有效!!探索和实验是Smalltalk所关注的一部分 - 使用力量,卢克:)