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 ]
请帮助我:(
最有可能的@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
!
谢谢!那边我应该实现构造函数方法吗? –
此外,大多数Smalltalk IDE将在该方法上有一个右键单击菜单,这将允许您重构和“移动到实例端”。 (Pharo) –
@DianaAyala我会在类的实例端保存'genlista'方法。要做到这一点,只需将方法从类中移到实例端(如我的答案中所述)。 –
你确定'genlista'方法在实例端的'Binario'类中实现吗?你在'Binario methodDict'的输出中看到'genlista'方法吗? – Uko