Thread overview
int[][] better type match than int[] for int[]?!
Sep 17, 2012
Andrej Mitrovic
Sep 17, 2012
Andrej Mitrovic
September 17, 2012
This completely surprised me:

bool doMatch(int[] lhsArr, int[][] arrArr)
{
    foreach (int[] rhsArr; arrArr)
    {
        writeln("if (!doMatch(lhsArr, arrArr))");

        if (!.doMatch(lhsArr, arrArr))
            return false;
    }

    return true;
}

bool doMatch(int[] lhsArr, int[] rhsArr)
{
    return true;
}

void main()
{
    int[] x   = [1, 2];
    int[][] y = [[1, 2], [1, 2]];

    bool b = doMatch(x, y);
}

This will enter an infinite loop because the first doMatch overload gets recursively called. I don't understand why the second overload isn't picked up as a match in the call "doMatch(lhsArr, arrArr)".
September 17, 2012
On Mon, 17 Sep 2012 09:21:41 -0400, Andrej Mitrovic <andrej.mitrovich@gmail.com> wrote:

> This completely surprised me:
>
> bool doMatch(int[] lhsArr, int[][] arrArr)
> {
>     foreach (int[] rhsArr; arrArr)
>     {
>         writeln("if (!doMatch(lhsArr, arrArr))");
>
>         if (!.doMatch(lhsArr, arrArr))

Don't you mean:

if(!.doMatch(lhsArr, rhsArr))

??

>             return false;
>     }
>
>     return true;
> }
>
> bool doMatch(int[] lhsArr, int[] rhsArr)
> {
>     return true;
> }
>
> void main()
> {
>     int[] x   = [1, 2];
>     int[][] y = [[1, 2], [1, 2]];
>
>     bool b = doMatch(x, y);
> }
>
> This will enter an infinite loop because the first doMatch overload
> gets recursively called. I don't understand why the second overload
> isn't picked up as a match in the call "doMatch(lhsArr, arrArr)".

Because arrArr is an int[][] :)

-Steve
September 17, 2012
On 9/17/12, Steven Schveighoffer <schveiguy@yahoo.com> wrote:
> Don't you mean:
>
> if(!.doMatch(lhsArr, rhsArr))

yessssssss.. oh man I need reading glasses! Or an IDE to warn me of my own mistakes! (preferably one that doesn't crash).

Another thread to nuke. :P