从另一个类方法调用类方法的正确方法是什么?
是吗
className methodName
或
self methodName
或
className class methodName
当我们不创建类的实例时,我们可以使用self吗?
答案 0 :(得分:3)
如果您从同一个班级中调用它,则需要使用self methodName
。在Smalltalk类中是一个对象本身,因此类方法中的self methodName
将消息发送给self,即类对象。
这也有利于在继承期间保持一致性。想象一下,您有SuperClass
和SubClass
。然后,如果您在self methodName
中的某处使用SuperClass
,那么在SubClass
中它将等同于SubClass methodName
,因为执行该方法的对象将是SubClass
对象。现在,如果您对SuperClass methodName
进行硬编码,那么它将在子类中相同,这可能不是您所期望的。
如果您要className class methodName
,您将向className class
对象发送一条消息,该对象是Metaclass
的一个实例,这可能与您的预期完全不同。
这是一张显示Smalltalk层次结构核心概念的图片。 (空心箭头是遗传)。
如果你有
SomeClass class >> #someMethod
"do something"
然后你应该使用
SomeClass class >> #otherMethod
self someMethod
或
OtherClass class >> #otherMethod
SomeClass someMethod
第二种情况适用于第一种情况,但首先从设计观点出发通常会更好。
答案 1 :(得分:1)
使用self
被认为更好,因为您可以避免在任何地方重复使用类名。至于其他的是否有效,请尝试让我们知道;)在图像中编译和运行单行方法比在SO上询问更有效!!探索和实验是Smalltalk所关注的一部分 - 使用力量,卢克:)