On Tuesday, 1 September 2020 at 02:08:54 UTC, JG wrote:
Is there anyway to remove the boilerplate code of dealing with
tuples:
I find myself having to write things like this fairly often
auto someRandomName = f(...); //where f returns a tuple with
two parts
auto firstPart = someRandomName[0];
auto secondPart = someRandomName[1];
I like using the following snippet for this kind of thing:
/// Pass the members of a tuple as arguments to a function
template unpack(alias fun)
{
import std.typecons: isTuple;
auto unpack(T)(T args)
if (isTuple!T)
{
return fun(args.expand);
}
}
Usage looks like this:
f(...).unpack!((firstPart, secondPart) {
// use firstPart and secondPart in here
});
It also works very well in range pipelines; for example,
auto nums = [1, 2, 3];
auto animals = ["lion", "tiger", "bear"];
zip(nums, animals)
.map!(unpack!((num, animal) =>
animal.repeat(num).joiner(" ")))
.each!writeln;
...which prints the output:
lion
tiger tiger
bear bear bear