for me the last expression of the block.

Stef
>>> Which return value would be useful?
>> 
>> That's not the right question.  IMO the compiler should answer the same
>> result as the non-inlined one when the return value is asked for.  Arguably
>> the non-inline version needs to be commented to specify that it returns the
>> value it does (in this case self), and that the compiler's optimiser
>> reflects this.
>> 
> 
> Agree, but I was wondering what useful object this common answer could be?
> 
>>> 
>>> Nicolas
>>> 
>>> 2011/10/16 Stéphane Ducasse <[email protected]>:
>>>> 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
>>> 
>> 
>> 
>> 
>> --
>> best,
>> Eliot
>> 
> 


Reply via email to