odd syntax for foreach
Oskar Linde
olREM at OVEnada.kth.se
Sun Aug 20 02:20:33 PDT 2006
BCS wrote:
> Oskar Linde wrote:
>> BCS wrote:
>> > from: http://www.digitalmars.com/d/statement.html#foreach
>> >
>> > <bnf>
>> > ForeachStatement:
>> > foreach (ForeachTypeList; Expression) Statement
>> >
>> > ForeachTypeList:
>> > ForeachType
>> > ForeachType , ForeachTypeList
>> > </bnf>
>> >
>> > Based on this the following is syntacticly correct.
>> >
>> > void main()
>> > {
>> > char[] foo;
>> > foreach(i,j,k;foo)
>> > {}
>> > }
>> >
>> > In fact it gives the error
>> >
>> > foreach.d(5): cannot infer type for j
>> Which is a correct error message.
>
> but it tells you nothing about what is wrong.
It tells you exactly what was wrong to the compiler. It didn't find a way to
infer the type for j. Such error messages are often better than if the
compiler tries to guess what you intended.
>
>> >
>> > which tells you nothing of much use. The following syntax looks
>> > more reasonable to me.
>> >
>> > <bnf>
>> > ForeachTypeList:
>> > ForeachType
>> > ForeachType , ForeachType
>> > </bnf>
>> Why? How would you then handle more than two variable foreach loops?
>> foreach(i,j,k,l,m;foo) is a valid syntax given a foo with an opApply
>> taking a 5 argument delegate.
>> /Oskar
>
> I known of nowhere that says that anthing but the 1 and 2 argument forms
> of the opApply are even valid. I haven't tried it though. Looking at the
> sepc, it looks like it might be allowed, but it dosn't actualy say so.
It is allowed and works very well.
>
> Whatever the case, the docs need a little work here and the error message
> gives nothing usefull other than the line number
The correct file? The correct line number? And you are still complaining? ;)
/Oskar
More information about the Digitalmars-d-bugs
mailing list