В зависимости от диалекта (доступные методы), вы можете взять более короткий подход
((1 to: 10) select: [ :each | (each rem: 3) = 0 ]) joinUsing: ' '
Как правило thumb¹ любой collection do: [ :each | something ifTrue: [] ]
может быть превращен в гораздо более прямолинейный и читаемый collection select: []
или collection reject: []
Выполнение этой задачи позволит разложить сложность по нескольким независимым шагам (1. фильтрация, 2. добавление в поток), вместо того, чтобы соединить все это вместе.
Или, если вы хотите, чтобы придерживаться оригинального
(((1 to: 10) select: [ :each | (each rem: 3) = 0 ])
inject: (WriteStream on: String new)
into: [ :stream :each |
stream
nextPutAll: each printString;
space;
yourself ]) contents
или
String streamContents: [ :stream |
(1 to: 10)
select: [ :each | (each rem: 3) = 0 ]
thenDo: [ :each |
stream
nextPutAll: each printString;
space
]
]
¹So не всегда, но всегда хорошо иметь в виду, когда вы столкнулись с такой ситуацией.
Какой диалект вы используете? Дельфин, VW, VA, Pharo, Squeak, GNU ... –