[fpc-pascal] Forin Test
Paul Ishenin
webpirat at mail.ru
Sat Nov 7 16:52:12 CET 2009
Dariusz Mazur wrote:
> Can You give example of this:
> where
> for i in List using GetEnumerator
> is better than
> for i in List.GetEnumerator
Of course. for-in loop expect to have a collection not an enumerator.
What enumerator should for-in loop to choose in the next case:
[example]
TMyListEnumerator = class
public
function GetEnumerator: TMyListEnumeratorEnumerator;
function MoveNext: Boolean;
property Current: something;
end;
TMyList = class
public
function GetEnumerator: TMyListEnumerator;
function GetAnotherEnumerator: TMyListAnotherEnumerator;
end;
var
List: TMyList;
begin
for i in List.GetEnumerator do
end;
[/example]
Loop will choose TMyListEnumeratorEnumerator, but is it desired?
'using' keyword solves this ambiguity very easy:
for CollectionElement in Collection using CollectionEnumerator do
>>> And second: You cant pass enumerator as param.
>> Maybe you understood me wrong? I proposed the 'using' keyword as an
>> extension to the current implementation. It would not be required. If
>> not used then it will work as now but if used then compiler will
>> search for the given identifier and use it instead of
>> operator/GetEnumerator method.
> this is third method,
> Should be good point to implement this (pascal always has very simple
> semantic and very strong type checking)
> Of course you then you can use any enumerator with any collection, but
> it will be better?
> How many errors we then invoke?
Much less.
Best regards,
Paul Ishenin.
More information about the fpc-pascal
mailing list