Smalltalkに、オブジェクトのOrderedCollectionを格納するクラスがあります。各オブジェクトには名前があります。OrderedCollectionオブジェクトを繰り返し処理し、これらの各オブジェクトの名前を出力したいと思います。たとえば、Javaでは次のようになります。
for(int i = 0; i < array.length; ++i) {
System.out.println(array[i].getName());
}
これは私がSmalltalkに到達した距離です。ここで、「リスト」はOrderedCollectionです。
1 to: list size do: [
:x | Transcript show: 'The object name:' list at: x printString; cr.
]
2つの小さな間違いを除いて、解決策は適切です。(1)括弧を忘れた、および(2)連結メッセージ#,
が欠落している:
1 to: list size do: [
:x | Transcript show: 'The object name:' list at: x printString; cr.
]
になるはずだった
1 to: list size do: [
:x | Transcript show: 'The object name:' , (list at: x) printString; cr.
]
そうしないと、Transcript
オブジェクトはメッセージを受信しますが#show:at:
、それは理解できません。また、文字列'The object name: '
を。で(list at: x) printString
連結する必要があるため#,
、間に連結メッセージが必要です。
ただし、この例では、インデックスを使用する必要がないことに注意してください。から1
を繰り返す代わりに、次のようにコレクションlist size
内のオブジェクトを単純に列挙できますlist
。
list do: [:object | Transcript show: 'The object name: ' , object printString; cr]
この形式は、(x
例では)中間インデックスの使用を回避し、を使用しx-
てコレクションのth要素にアクセスするように強制するため、通常は推奨されます#at:
。これらすべてにより、コードの読み取りと変更が容易になります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加