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.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to