我创建了一个OrderedCollection列表,现在我想通过使用Transcript将其打印出来,如下所示:
range do:[:each|Transcript show: each].
输出是35791113,但我需要3 5 7 9 11 13,所以我需要元素之间的空格。 我也尝试过..
Transcript show: range.
但是我不想使用OrderedCollection(3 5 7 9 11 13),而是只有列表元素,没有OrderedCollection。 怎么做到这一点?
答案 0 :(得分:7)
在 Pharo 中,您可以直接执行
Transcript show: (range joinUsing: ' ')
或相反的
Transcript show: (' ' join: range)
即使元素是数字,这也会有效。
在 GNU Smalltalk 中,您需要更明确
Transcript show: ((range collect: [ :each | each asString ]) join: ' ')
最后,您只需使用do:separatedBy:
range
do: [ :each | Transcript show: each ]
separatedBy: [ Transcript show: ' ' ]
答案 1 :(得分:4)
与方言无关的解决方案看起来像
| first |
first := true.
range do: [:each |
first ifTrue: [frist := false] ifFalse: [Transcript show: ' '].
Transcript show: each]
但是,每种方言都有办法做到这一点。例如,在Pharo中,我们有#do:separatedBy:
消息:
range do: [:each | Transcript show: each] separatedBy: [Transcript show: ' ']
您可能想要做的另一件事是使用Transcript space
来获取
range do: [:each | Transcript show: each] separatedBy: [Transcript space]
另外,我建议采用更通用的方法,将字符串表示转储到更通用的对象上,例如WriteStream
:
dump: range on: aStream
range do: [:each | each printOn: aStream] separatedBye: [aStream space]
所以现在你可以简单地写
<receiver> dump: range on: Transcript
获得理想的结果。
答案 2 :(得分:2)
在Squeak,Pharo和Cuis中你可以做到
#(3 5 7 9 11 13) do: [:each | Transcript show: each; space]
获得结果。