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

Smalltalk 我们如何从另一个类方法调用一个类方法?,smalltalk,squeak,Smalltalk,Squeak,从另一个类方法调用类方法的正确方法是什么 是吗 className methodName 或 或 当我们不创建类的实例时,我们可以使用self吗 使用self被认为更好,因为您可以避免在任何地方重复类名。至于其他方法是否有效,请尝试让我们知道;)在您的图像中编译并运行一行方法要比这样问更有效!!探索和实验是Smalltalk的一部分——使用原力,Luke:)使用self被认为更好,因为你可以避免在任何地方重复类名。至于其他方法是否有效,请尝试让我们知道;)在您的图像中编译并运行一行方法要比

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

是吗

  className methodName


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

使用
self
被认为更好,因为您可以避免在任何地方重复类名。至于其他方法是否有效,请尝试让我们知道;)在您的图像中编译并运行一行方法要比这样问更有效!!探索和实验是Smalltalk的一部分——使用原力,Luke:)

使用
self
被认为更好,因为你可以避免在任何地方重复类名。至于其他方法是否有效,请尝试让我们知道;)在您的图像中编译并运行一行方法要比这样问更有效!!探索和实验是Smalltalk的一部分——使用原力,Luke:)

如果你从同一个类调用它,你想使用
self-methodName
。在Smalltalk中,类本身是一个对象,因此类方法中的
self-methodName
向self发送消息,即类对象

这也有助于在继承期间保持一致性。假设您有
超类
子类
。然后,如果在
超类
中的某个地方使用
self-methodName
,那么在
子类
中,它将等同于
子类methodName
,因为执行该方法的对象将是
子类
对象。现在,如果您硬编码
超类methodName
,那么它在子类中是相同的,这可能不是您所期望的

如果您执行
className class methodName
操作,您将向
className class
对象发送一条消息,该对象是
元类的一个实例,这可能与您预期的完全不同

下面是一张显示Smalltalk层次结构核心概念的图片。(空心箭头表示继承)

长话短说: 如果你有

SomeClass class >> #someMethod
    "do something"
那你应该用

SomeClass class >> #otherMethod
    self someMethod


第二种方法适用于第一种情况,但从设计角度来看,第一种方法通常更好。

如果从同一个类调用它,您希望使用
self-methodName
。在Smalltalk中,类本身是一个对象,因此类方法中的
self-methodName
向self发送消息,即类对象

这也有助于在继承期间保持一致性。假设您有
超类
子类
。然后,如果在
超类
中的某个地方使用
self-methodName
,那么在
子类
中,它将等同于
子类methodName
,因为执行该方法的对象将是
子类
对象。现在,如果您硬编码
超类methodName
,那么它在子类中是相同的,这可能不是您所期望的

如果您执行
className class methodName
操作,您将向
className class
对象发送一条消息,该对象是
元类的一个实例,这可能与您预期的完全不同

下面是一张显示Smalltalk层次结构核心概念的图片。(空心箭头表示继承)

长话短说: 如果你有

SomeClass class >> #someMethod
    "do something"
那你应该用

SomeClass class >> #otherMethod
    self someMethod


第二种方法适用于第一种情况,但从设计角度来看,第一种方法通常更好。

是的,区别在于Java没有允许存在类端方法的双类层次结构。“self”始终是当前实例-但在类方法中,“当前实例”是类本身,而不是类的特定实例。Java中的“this”也总是当前实例,但不同的对象模型意味着没有“当前实例”是类的场景。是的,区别在于Java没有允许类端方法存在的双类层次结构。“self”始终是当前实例-但在类方法中,“当前实例”是类本身,而不是类的特定实例。Java中的“this”也总是当前实例,但不同的对象模型意味着没有“当前实例”是类的场景。
OtherClass class >> #otherMethod
    SomeClass someMethod