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