如何在 Smalltalk 中打印来自 OrderedCollection 的对象数据
How to print object data from OrderedCollection in Smalltalk
我在 Smalltalk 中有一个 class 存储对象的 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) 你忘记了一些括号和 (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
连接起来,这就是为什么您需要在两者之间连接消息 #,
。
但是请注意,在您的示例中不需要使用索引。您可以简单地枚举 list
集合中的对象,而不是从 1
迭代到 list size
,如下所示:
list do: [:object | Transcript show: 'The object name: ' , object printString; cr]
通常首选这种形式,因为它避免使用中间索引(在您的示例中为 x
)并强制您使用 [=24= 访问集合的第 x-
个元素], 所有这些都使您的代码更易于阅读和修改。
我在 Smalltalk 中有一个 class 存储对象的 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) 你忘记了一些括号和 (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
连接起来,这就是为什么您需要在两者之间连接消息 #,
。
但是请注意,在您的示例中不需要使用索引。您可以简单地枚举 list
集合中的对象,而不是从 1
迭代到 list size
,如下所示:
list do: [:object | Transcript show: 'The object name: ' , object printString; cr]
通常首选这种形式,因为它避免使用中间索引(在您的示例中为 x
)并强制您使用 [=24= 访问集合的第 x-
个元素], 所有这些都使您的代码更易于阅读和修改。