如何从Smalltalk中的OrderedCollection打印对象数据

时间:2015-09-27 18:00:57

标签: loops smalltalk

我在Smalltalk中有一个类,它存储OrderedCollection对象。每个对象都有一个名称。我想迭代OrderedCollection对象并打印出每个对象的名称。例如,在Java中我会有类似的东西:

for(int i = 0; i < array.length; ++i) {
  System.out.println(array[i].getName());
}

这是我在Smalltalk中获得的,其中“list”是OrderedCollection:

1 to: list size do: [
:x | Transcript show: 'The object name:' list at: x printString; cr.
]

1 个答案:

答案 0 :(得分:9)

您的解决方案很好,除了两个小错误:(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,而不是:{/ p>

list do: [:object | Transcript show: 'The object name: ' , object printString; cr]

此表单通常是首选,因为它避免使用中间索引(示例中为x)并强制您使用x-访问集合的#at:元素,所有这些都使您的代码更易于阅读和修改。