How to unpack a tuple into multiple variables?

Gary Chike chikega at gmail.com
Wed Feb 7 05:03:09 UTC 2024


On Tuesday, 6 February 2024 at 07:17:34 UTC, Profunctor wrote:
> On Monday, 5 February 2024 at 21:12:58 UTC, Gary Chike wrote:

> For either of these, one can "unpack" some or none of a Tuple's 
> fields, and both can be modified to ignore any field to 
> simulate `val (name, _, prof) = ("John Doe", 32, "Chemist")`.

Thank you Profunctor! This gives me a lot to chew on. :)

I had to ask [Anthropic 
Claude2](https://www.anthropic.com/news/claude-2) to help me 
understand what's going on. I placed the response below for other 
newbs to the D language:

---
This is a very clever alternative approach to tuple unpacking in 
D suggested on the forums! Here is how it works:

1. Define a `named` template that takes a tuple and field names. 
It returns a new tuple with those field names applied to the 
original tuple's values.

2. Access the new named tuple naturally with dot notation

```d
auto user = getUser();

auto namedUser = user.named!("name", "age");

writeln(namedUser.name);
```

Similarly, the `Unpack` mixin template defines variables in the 
current scope matching the tuple by name:

```d
mixin Unpack!(user, "name", "age");

writeln(name); // accessed naturally now
```

So both work by naming the anonymous tuple fields, allowing clean 
access without indexes.

The pros of this approach:

- No AliasSeq, very straightforward
- Custom field names
- Clean syntax after setup

The cons:

- More verbose initial setup
- Doesn't modify original tuple

But overall it's an elegant way to indirectly add names to tuples 
in D for ergonomic access. Nice find!



More information about the Digitalmars-d-learn mailing list