在pharo smalltalk中调用方法

时间:2017-07-05 21:32:19

标签: oop methods smalltalk pharo

我正在尝试从另一个类(Binario)调用一个函数,但它说它没有实现。

这是Binario类中方法的代码:

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

这是其他类方法的代码:

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

请帮帮我:(

1 个答案:

答案 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}}旁边!

相关问题