2009-10-03 71 views
2

我想學習一些smalltalk編程....我試圖創建一個myClass類型的對象列表。什麼是最好的方法來做到這一點?在Smalltalk鍵入的集合

我有以下幾點:

| list | 
list := OrderedCollection new. 

糾正我,如果我錯了。

那麼我應該如何添加元素到我的列表?

+0

我已經編輯這一個給你,但請在將來嘗試使用描述性的問題標題。你更有可能得到更好的迴應。 – bobbymcr 2009-10-03 17:43:56

回答

9

要創建MyClass的新實例發送該類消息#NEW

MyClass new 

現在,將元素添加到集合中,只需發送短信#將集合:

list add: MyClass new 

Smalltalk中沒有靜態類型。換句話說,Java ArrayList <MyClass>的等價物就是OrderedCollection。

2

在回答之前強調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'))