Using a tuple as a function parameter
IchorDev
zxinsworld at gmail.com
Sat Nov 23 12:05:02 UTC 2024
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.
Why not this?
```d
string getOrZeroth(string[3] tup, int i) pure {
return tup[i] == "" ? tup[0] : tup[i];
}
auto foo = ["a", "", "c"];
writeln(foo.getOrZeroth(1)); // prints a
```
No need for a class unless you want a reference type. Tuples are
basically just ad-hoc structs. If you want to pass around several
types of data that are also used as compile-time sequences then
Tuples are for you, otherwise just make a struct for anything
using multiple data types.
More information about the Digitalmars-d-learn
mailing list