Smalltalk 创建在清空堆栈内容时打印的方法

Smalltalk 创建在清空堆栈内容时打印的方法,smalltalk,pharo,Smalltalk,Pharo,在课堂上:“AStack” Object subclass: #AStack instanceVariableNames: 'elements' ... 它包含一个OrderedCollection对象,该对象保存它的“元素对象” initialize super initialize. elements := OrderedCollection new 它的成员类分别是push和pop: push: anObject self elements addFirst: anObje

在课堂上:“AStack”

Object subclass: #AStack
    instanceVariableNames: 'elements'
...
它包含一个OrderedCollection对象,该对象保存它的“元素对象”

initialize 
super initialize.
elements := OrderedCollection new
它的成员类分别是push和pop:

push: anObject 
self elements addFirst: anObject 

pop
^self elements removeFirst 
我正在尝试编写一个打印方法,该方法使用timesRepeat打印堆栈的内容,同时清空堆栈。它为每个“元素”(print^self name)调用子类print方法,并使用“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从堆栈中弹出时显示它们的名称?

在您给我一个完整(至少更大)的堆栈跟踪之前,我不能确切地告诉您,但是我希望,您的类中不会定义一个
\size
方法,它应该是这样的:

size
  ^ elements size
如果将
at:
at:put:
size
发送到没有索引实例变量或未重写这些方法的类的实例,则会出现“AClass的实例不可索引”错误

因此,如果您将这些消息中的任何一条发送到
AStack
(没有索引实例变量)的实例,请确保
AStack
定义了您发送的消息