创建一个在清空Stack内容时打印的方法

时间:2014-10-04 20:00:15

标签: smalltalk pharo

鉴于课程:' AStack'

Object subclass: #AStack
    instanceVariableNames: 'elements'
...

它包含一个OrderedCollection对象,用于保存它的元素对象'

initialize 
super initialize.
elements := OrderedCollection new

它的成员类分别推送和弹出:

push: anObject 
self elements addFirst: anObject 

pop
^self elements removeFirst 

我正在尝试编写一个print方法,该方法使用timesRepeat打印堆栈的内容并同时清空它。它为每个元素调用子类打印方法' (打印^自我名称)并使用' Transcript'

在屏幕上输出
print
self size timesRepeat: [Transcript show: self pop print]

另一方面,我有一个名为' SomeRandomObject'谁的印刷方法是:

print
Transcript show:self getName; cr

工作区代码:

| o1 o2 stk |

o1 := SomeRandomObject new.
o1 name: 'object1'.

o2 := SomeRandomObject new.
o2 name: 'object2'.

stk := AStack new.
stk push: o1.
stk push: o2.

stk print "prints and emptys stack"

运行后我收到错误:

错误:AStack实例无法编入索引

如何修复我的代码,以便print方法在将它们弹出堆栈时显示o1和o2名称?

2 个答案:

答案 0 :(得分:2)

在你给我一个完整的(至少更大的)堆栈跟踪之前我无法告诉你,但是我希望你的类中没有定义#size方法应该是这样的:

size
  ^ elements size

答案 1 :(得分:1)

如果您向at:at:put:size发送了AStackAStack或{{1}},那么您将获得" AClass的实例不可转发“错误没有索引实例变量或未覆盖这些方法的类。

因此,如果您将任何这些消息发送到{{1}}的实例(没有索引的实例变量),请确保{{1}}定义您发送的消息。