A friend of mine ask me the following


|result|
result := String new.
1 to: 10 do: [:n | result := result, n printString, ' '].

I am trying to do or print this code. It prints 'nil' instead of a collection. Its an example from PBE book.
do you know the reason?

although this one's working:

result := String new.
(1 to: 10) do: [:n | result := result, n printString, ' '].

I checked the implementation 

Interval>>do: aBlock
"Evaluate aBlock for each value of the interval.
Implementation note: instead of repeatedly incrementing the value
aValue := aValue + step.
until stop is reached,
We prefer to recompute value from start
aValue := start + (index * step).
This is better for floating points accuracy, while not degrading Integer and Fraction speed too much.
Moreover, this is consistent with methods #at: and #size"

| aValue index size |
index := 0.
size := self size.
[index < size]
whileTrue: [aValue := start + (index * step).
index := index + 1.
aBlock value: aValue]


Number>>to: stop do: aBlock 
"Normally compiled in-line, and therefore not overridable.
Evaluate aBlock for each element of the interval (self to: stop by: 1)."
| nextValue |
nextValue := self.
[nextValue <= stop]
whileTrue: 
[aBlock value: nextValue.
nextValue := nextValue + 1]


any further idea than := value is different from value:

Stef