Using a tuple as a function parameter

Andy Valencia dont at spam.me
Fri Nov 22 17:51:46 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

I'm guessing you have some Python in your background, where 
"tuple" means "read-only list (e.g., array)".  Your "tuple" here 
actually wants to be an immutable array of string, and then life 
is good.  Tuples are a way to have an array of dissimilar 
types--but then run-time generated values used to index the tuple 
will add--in the general case--all sorts of imponderables to the 
compiler's type treatment.

You could claim it can do it for the special case of a tuple 
holding only one type, but why bother?  We already have arrays.

You might want to study what it takes to walk the fields of a 
type (Type.tupleof).  The foreach is actually unrolled at compile 
time for each field.  From one of my own exercises, a mini-CSV 
module:

https://sources.vsta.org:7100/dlang/file?name=tiny/csv.d&ci=tip


More information about the Digitalmars-d-learn mailing list