我想學習一些smalltalk編程....我試圖創建一個myClass類型的對象列表。什麼是最好的方法來做到這一點?在Smalltalk鍵入的集合
我有以下幾點:
| list |
list := OrderedCollection new.
糾正我,如果我錯了。
那麼我應該如何添加元素到我的列表?
我想學習一些smalltalk編程....我試圖創建一個myClass類型的對象列表。什麼是最好的方法來做到這一點?在Smalltalk鍵入的集合
我有以下幾點:
| list |
list := OrderedCollection new.
糾正我,如果我錯了。
那麼我應該如何添加元素到我的列表?
要創建MyClass的新實例發送該類消息#NEW
MyClass new
現在,將元素添加到集合中,只需發送短信#將集合:
list add: MyClass new
Smalltalk中沒有靜態類型。換句話說,Java ArrayList <MyClass>的等價物就是OrderedCollection。
在回答之前強調Smalltalk中沒有強類型是很重要的。每個變量都是某個Class對象的實例。但是對象的類可以在對象的生命週期中經常變化,解釋器和編譯器都不會在意。
輸入以下代碼到工作空間(或者在菲羅4.0的「遊樂場」,或者達到在GNU Smalltalk的命令行)
aNumber := 3 . "new instance of Class SmallInt is created"
aNumber := 22/7 . "aNumber is now an instance of Class Fraction"
aNumber := 3.14159 . "aNumber is now an instance of Class Float"
aNumber := 'Pi' . "aNumber is now an instance of Class ByteString"
沒有警告或異常將提高任何這些聲明。
現在是出路,
我應該怎麼元素添加到我的名單?
這取決於您使用的列表類型。
數組是一個固定大小的整數索引列表。 OrderedCollection是一個可變大小的整數索引列表。 Set是一組獨特的對象。 字典是一組關聯對象,即鍵值對 SortedCollection是一個對象列表,基於分類塊定義進行排序。
他們每個人都有獨特的方法添加項目。
爲標準集合最常見的方法是 -
add:
(沒有可用的數組或字符串 - 因爲它們不能具有其改變的要素數,初始創建後) at:put:
(沒有可用的集,如在效果它僅包含鍵,但沒有值)
OrderedCollection也有addFirst:
,add:after:
,add:before:
,add:beforeIndex:
如果您發送加入消息到一個集合,但收不明白ŧ特別的消息,它會引發一個例外。
因此,對於您list
| list newElement1 newElement2 newElement3 |
list := OrderedCollection new .
newElement1 := 'ABC' . "a ByteString"
newElement2 := 123 . "a SmallInt"
newElement3 := Dictionary new .
newElement3 at: 'Doh' put: 'A deer, a female deer' ;
at: 'Ray' put: 'A drop of golden sun' ;
at: 'So' put: 'A needle pulling thread' .
list add: newElement1 ;
add: newElement2 ;
add: newElement3 .
會導致
list (an OrderedCollection) [3 items] ('ABC' 123 aDictionary [2 items] ('Doh'->'A deer, a female deer' 'Ray'->'A drop of golden sun'))
我已經編輯這一個給你,但請在將來嘗試使用描述性的問題標題。你更有可能得到更好的迴應。 – bobbymcr 2009-10-03 17:43:56