4

smalltalkプログラミングを学ぼうとしています。myClass型のオブジェクトのリストを作成しようとしています。これを行うための最良の方法は何ですか?

私は次のものを持っています:

| list |
list := OrderedCollection new.

私が間違っている場合は私を訂正してください。

では、リストに要素を追加するにはどうすればよいですか?

4

2 に答える 2

12

MyClassの新しいインスタンスを作成するには、クラスにメッセージ#newを送信します

MyClass new

ここで、コレクションに要素を追加するには、コレクションにメッセージ#add:を送信するだけです。

list add: MyClass new

Smalltalkには静的型のようなものはありません。つまり、JavaArrayList<MyClass>に相当するのはOrderedCollectionです。

于 2009-10-03T18:49:32.320 に答える
3

答える前に、Smalltalkには強い型付けがないことを強調することが重要です。すべての変数は、あるクラスのオブジェクトのインスタンスです。ただし、オブジェクトのクラスはオブジェクトのライフサイクル全体で頻繁に変更される可能性があり、インタープリターもコンパイラーも気にしません。

次のコードをワークスペース(またはPharo 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は、可変サイズの整数インデックス付きリストです。セットは、一意のオブジェクトのコレクションです。ディクショナリは、関連付けオブジェクトのセットです。つまり、キーと値のペアです。SortedCollectionは、ソートブロック定義に基づいてソートされたオブジェクトのリストです。

それぞれに、アイテムを追加する独自の方法があります。

標準コレクションの最も一般的な方法は次のとおりです-
add:(最初の作成後に要素の数を変更できないため、配列または文字列では使用できません) 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'))

于 2015-11-16T16:36:44.537 に答える