The standard does *not* support - a removeAll: a - [was: Re:
[BUG]
Stephan Rudlof
sr at evolgo.de
Sat Aug 31 15:53:34 UTC 2002
Jesse Welton wrote:
<snipped>
>
> However, I'm not sure how much weight to put on the fact that the
> standard doesn't say anything about the argument to #removeAll: being
> invariant during the call. On a quick browse, I didn't see any
> explicit caveats about the receiver of a #do: being modified by the
> argument block, either.
> Richard, would you say that the standard
> requires #do: to work properly when the receiver is modified during
> the iteration, as well?
What should be the semantics then?
E.g.:
| a num |
num _ 1.
a := OrderedCollection with: num.
a do: [:e | a size < 100 ifTrue: [a add: (num _ num+1)]].
a
Should this give 100 elements in a (iterating over added elements, too)?
Or 2 (copy semantics)? Like with
| a num |
num _ 1.
a := OrderedCollection with: num.
a copy do: [:e | a size < 100 ifTrue: [a add: (num _ num+1)]].
a
BTW: it gives 9...
Greetings,
Stephan
>From the standard:
NCITS J20 DRAFT of ANSI Smalltalk Standard
December, 1997 revision 1.9
5.7.1.13
Message:
do: operation
Synopsis
Evaluate operation with each element of the receiver.
Definition: <collection>
For each element of the receiver, operation is evaluated with the element
as the parameter.
Unless specifically refined, the elements are not traversed in a particular
order. Each element is visited exactly once. Conformant protocols may refine
this message to specify a particular ordering.
Parameters
operation <monadicValuable> uncaptured
Return Values
UNSPECIFIED
Errors
If the elements of the receiver are inappropriate for use as arguments to
operation.
>
> -Jesse
>
>
>
--
Stephan Rudlof (sr at evolgo.de)
"Genius doesn't work on an assembly line basis.
You can't simply say, 'Today I will be brilliant.'"
-- Kirk, "The Ultimate Computer", stardate 4731.3
More information about the Squeak-dev
mailing list
|