Vor der Beantwortung der Frage Es ist wichtig zu betonen, dass es in Smalltalk keine starke Typisierung gibt. Jede Variable ist eine Instanz einer Klasse von Objekten. Aber die Klasse des Objekts kann sich während des Lebenszyklus des Objekts häufig ändern und weder der Interpreter noch der Compiler kümmern sich darum.
Geben Sie den folgenden Code in den Arbeitsbereich ein (oder in den "Playground" auf Pharo 4.0 und höher, oder in die Kommandozeile von 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"
Für diese Anweisungen werden keine Warnungen oder Ausnahmen ausgelöst.
Das ist jetzt aus dem Weg geräumt,
Wie sollte ich meiner Liste Elemente hinzufügen?
Dies hängt von der Art der Liste ab, die Sie verwenden.
Ein Array ist eine ganzzahlig indizierte Liste mit fester Größe. Eine OrderedCollection ist eine ganzzahlig indizierte Liste mit variabler Größe. Ein Set ist eine Sammlung von eindeutigen Objekten. Ein Dictionary ist eine Menge von Assoziationsobjekten, d. h. von Schlüssel-Wert-Paaren. Eine SortedCollection ist eine Liste von Objekten, sortiert auf der Grundlage einer Sortierblock Definition.
Sie haben jeweils eigene Methoden zum Hinzufügen von Artikeln.
Die gängigsten Methoden für die Standardsammlungen sind -
add:
(nicht verfügbar für Array oder String - da die Anzahl der Elemente nach der ersten Erstellung nicht geändert werden kann) at:put:
(nicht verfügbar für Set, da es nur Schlüssel, aber keine Werte enthält)
OrderedCollection hat auch addFirst:
, add:after:
, add:before:
, add:beforeIndex:
Wenn Sie eine Hinzufügungsnachricht an eine Sammlung senden, die Sammlung diese Nachricht aber nicht versteht, löst sie eine Ausnahme aus.
Also, für Ihre 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 .
würde dazu führen, dass
list (an OrderedCollection) [3 items] ('ABC' 123 aDictionary [2 items] ( 'Doh'->'A deer, a female deer' 'Ray'->'A drop of golden sun'))