2014-10-04 60 views
1

鑑於類打印方法:「AStack」創建,同時清空棧的內容

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

它包含保存它是一個OrderedCollection對象「元素對象」

initialize 
super initialize. 
elements := OrderedCollection new 

它的成員類推動和流行,分別爲:

push: anObject 
self elements addFirst: anObject 

pop 
^self elements removeFirst 

我想寫一個打印方法,使用timesRe泥炭打印堆棧的內容以及同時清空它。它調用每個'元素'的子類打印方法(print^self name)並使用'Transcript'在屏幕上輸出它。

​​

在另一邊我稱之爲 '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的實例不可索引

如何修復我的代碼,使打印方法在彈出堆棧時顯示o1和o2名稱?

回答

2

我不能告訴你,你給恰好之前我一個完整的(至少較大的)堆棧跟蹤,但我相信,你不會在你的類中定義的#size方法應該是這樣的:

size 
^elements size 
1

你會得到,如果你發送at:at:put:size到沒有索引實例變量或沒有覆蓋這些方法的類的實例「ACLASS的實例不是可轉位「錯誤。

因此,如果您將這些消息中的任何一個發送到AStack(沒有索引實例變量)的實例,請確保AStack定義您發送的消息。