簡體   English   中英

Smalltalk中的類型集合

[英]Typed collections in Smalltalk

我正在嘗試學習一些smalltalk編程....我正在嘗試創建一個myClass類型的對象列表。 最好的方法是什么?

我有以下內容:

| list |
list := OrderedCollection new.

如果我錯了糾正我。

那么我應該如何在列表中添加元素呢?

要創建MyClass的新實例,請向類發送消息#new

MyClass new

現在,要向集合添加元素,只需向集合發送消息#add:

list add: MyClass new

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

在回答之前,重點強調Smalltalk沒有強力打字。 每個變量都是某個對象類的實例。 但是對象類可以在對象的生命周期中經常更改,並且解釋器和編譯器都不會關心。

在工作區中輸入以下代碼(或在Pharo 4.0及更高版本的“Playground”或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"

任何這些陳述都不會引發任何警告或例外。

現在已經不在了,

我該如何在列表中添加元素?

這取決於您使用的列表類型。

Array是固定大小的整數索引列表。 OrderedCollection是可變大小的整數索引列表。 集合是唯一對象的集合。 字典是一組關聯對象,即鍵值對.SlassedCollection是對象列表,基於排序塊定義排序

他們每個人都有獨特的添加項目的方法。

標准集合的最常用方法是 -
add:不適用於Array或String - 因為它們在初始創建后不能更改其元素數量) at:put:不適用於Set,因為它實際上只包含鍵,但沒有值)

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'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM