On Friday, 22 November 2024 at 16:36:43 UTC, Andrew wrote:
I'm getting started using D for some small personal projects and one thing I wanted to do was use a helper function for a tuple. I declared the function like this:

string getOrZeroth(Tuple!(string, string, string) tup, int i) pure {
        return tup[i] == "" ? tup[0] : tup[i];
    }

and would like to use it like this:

    auto foo = tuple("a", "", "c");
    writeln(foo.getOrZeroth(1)); // prints a

but when I try it, I'm getting the below error:

Error: variable \`i\` cannot be read at compile time

It would probably make more sense to create a class and make that a member function, but at this point I'm mostly just curious about how to use a tuple as a function parameter. I tried using a couple different options like `tuple` and `TypeTuple` as well as trying to convert the function into a template, but didn't have any better luck with those. I feel like I'm probably missing something silly, and any help would be appreciated.

Thats being successfully passed, what the compiler hates is that tuples could be mixed types

`auto foo(tuple!(int,bool,float) t,int i)=>t[i];` should and does fail

You happen to be passing in all strings but thats not what the api is for, you could probaly make it compile with an ugly cast, verbose switch, but if you know its all the same type you should use an array(`foo(T,N)(T[N] arr...)` btw)

Reply via email to