pharo smalltalk中的调用方法

问题描述:

我想从另一个类(Binario)调用函数,但它说它没有实现。pharo smalltalk中的调用方法

这是在Binario类的方法的代码:

genlista 
^(1 to: 30) collect: [ :i | 2 atRandom - 1 ] 

而这是其他类方法的代码:

ListadelistasBin 
    | bin | 
    bin := Binario new. 
^(1 to: 30) collect: [ :i | bin genlista ] 

请帮助我:(

+3

你确定'genlista'方法在实例端的'Binario'类中实现吗?你在'Binario methodDict'的输出中看到'genlista'方法吗? – Uko

最有可能的@Uko是正确的,你在Binario的类端定义了方法,而不是在实例端。检查这个的一种方法是修改你的第二个方法,如下所示:

ListadelistasBin 
    | bin | 
    bin := Binario.       "<- new removed" 
^(1 to: 30) collect: [:i | bin genlista] 

如果现在你得到的答案,然后发生了什么事是你genlista方法是在错误的地方(类侧,而不是如侧)。

在Smalltalk中,每种方法都属于一个类。但是,一个班级有两个“方面”。 实例一侧是您为类的实例放置方法的位置。 方是您为类本身放置方法的地方。

你怎么知道你已经保存了某个方法的哪一方?只需查找每个浏览器都必须选择一个或另一个端口的开关。例如,在Pharo中,有一个切换按钮用于选择每个边。

尽管实例方法定义了类(和子类)实例的行为,但类方法是要发送给类的。这只是类作为对象的结果。例如,Binario new是发送给类Binario的消息,我们相信您的意图是为Binario的实例定义genlista方法。如果是这种情况,那么复制方法的源代码并将其粘贴到类的实例端。然后删除类方法,然后重试。啊!并且不要忘记将new消息放回Binario旁边ListadelistasBin

+0

谢谢!那边我应该实现构造函数方法吗? –

+1

此外,大多数Smalltalk IDE将在该方法上有一个右键单击菜单,这将允许您重构和“移动到实例端”。 (Pharo) –

+0

@DianaAyala我会在类的实例端保存'genlista'方法。要做到这一点,只需将方法从类中移到实例端(如我的答案中所述)。 –