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