我正在尝试从另一个类(Binario)调用一个函数,但它说它没有实现。
这是Binario类中方法的代码:
genlista
^ (1 to: 30) collect: [ :i | 2 atRandom - 1 ]
这是其他类方法的代码:
ListadelistasBin
| bin |
bin := Binario new.
^ (1 to: 30) collect: [ :i | bin genlista ]
请帮帮我:(
答案 0 :(得分:3)
很可能@Uko是正确的,您在Binario
的类侧而不是在实例端定义了该方法。检查这种方法的一种方法是修改你的第二种方法:
ListadelistasBin
| bin |
bin := Binario. "<- new removed"
^ (1 to: 30) collect: [:i | bin genlista]
如果现在你得到答案,那么发生的事情是你的genlista
方法位于错误的位置(类侧而不是实例方)。
在Smalltalk中,每个方法都属于一个类。但是,一个班级有两个“侧面”。 实例侧是您为类的实例放置方法的地方。 类方面是您为类本身放置方法的地方。
如何判断一个类保存方法的哪一方?只需查看每个浏览器必须选择一个或另一个侧面的开关。例如,在Pharo中,有一个切换按钮,用于选择每个边。
虽然实例方法定义了类(和子类)实例的行为,但是类方法应该发送给类。这只是类作为对象的结果。例如,Binario new
是发送给班级Binario
的邮件,我们认为您的目的是为genlista
的实例定义Binario
方法。如果是这种情况,则复制方法的源代码并将其粘贴到类的实例端。然后删除类方法,然后重试。啊!并且不要忘记将new
消息放回Binario
ListadelistasBin
的{{1}}旁边!