Nested Foreach
Ary Borenszweig
ary at esperanto.org.ar
Fri Jul 17 05:35:24 PDT 2009
John C escribió:
> Is nesting foreach statements supposed to work? I hit a problem today that I've never encountered before, even though I'm sure I've nested foreach before. Here's an example that illustrates the problem:
>
>
> class Collection {
>
> int opApply(int delegate(ref Object) a) {
> return 0;
> }
>
> }
>
> Object testForeach(Collection level1, Collection level2) {
> foreach (first; level1) {
> foreach (second; level2) {
> return second;
> }
> }
> return null;
> }
>
> void main() {
> testForeach(new Collection, new Collection);
> }
>
> Error: cannot implicitly convert expression (second) of type object.Object to int
>
> If someone else can repro this, I'll enter it into Bugzilla.
>
> John.
I can confirm that it's a bug. And I can see in Descent the testForeach
function is translated to this:
Object testForeach(Collection level1, Collection level2) {
switch(level1.opApply(delegate (Object __applyArg0) {
{
Object first = __applyArg0;
switch(level2.opApply(delegate (Object __applyArg0) {
{
Object second = __applyArg0;
{
// ** Here's the problem **
__result = cast(Object) cast(int) second;
return 2;
}
}
return 0;
} )) {
default:
break;
case 2:
__result = __result;
return 2;
}
}
return 0;
} )) {
default:
break;
case 2:
return __result;
}
return cast(Object) null;
}
Maybe that helps fixing it. :-)
More information about the Digitalmars-d
mailing list