在 Smalltalk OrderedCollection 中打印元素时如何在元素之间添加空格?
How to add whitespace between elements when printing them out in Smalltalk OrderedCollection?
我已经创建了一个 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。
如何实现?
独立于方言的解决方案看起来像
| 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
得到想要的结果。
在 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: ' ' ]
在 Squeak、Pharo 和 Cuis 中你可以这样做
#(3 5 7 9 11 13) do: [:each | Transcript show: each; space]
得到结果。
我已经创建了一个 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。 如何实现?
独立于方言的解决方案看起来像
| 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
得到想要的结果。
在 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: ' ' ]
在 Squeak、Pharo 和 Cuis 中你可以这样做
#(3 5 7 9 11 13) do: [:each | Transcript show: each; space]
得到结果。