Momentary Eh?! for a Dynamic Language Programmmer. Tuples vs Arrays. Just rambling.
Meta via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jun 23 16:59:59 PDT 2014
On Monday, 23 June 2014 at 22:11:57 UTC, John Carter wrote:
> On Monday, 23 June 2014 at 21:49:29 UTC, Ary Borenszweig wrote:
>
>> Union types are very common (I use them every day), and IMHO
>> it's very nice to have them included in the language (either
>> built-in or as a library solution). As a library solution I
>> would do something like this:
>>
>> Union!(int, string)[] elements;
>
> Hmm. egrepping through /usr/include/dmd fails to find
> '\bUnion\b', are you sure you don't mean Algebraic?
You're looking for std.variant.Algebraic and std.typecons.Tuple.
Tuple is actually a library-defined struct, with no compiler
magic. The tuple situation in D is a bit weird; there are
compiler tuples (which you don't need to worry about in this
case), and library tuples, i.e., std.typecons.Tuple. There's also
at least 1 other kind of special tuple, but you should hardly
ever need to deal with that. For most cases, just use
std.typecons.Tuple. Here's a few simple examples:
import std.typecons: Tuple;
Tuple!(string, File[]) getDirListing(string dir)
{
//...
}
//Even better
alias DirListing = Tuple!(string, File[]);
DirListing getDirListing(string dir)
{
//...
}
//Adding a string after a tuple member names that field
alias DirListing = Tuple!(string, "dir", File[], "files");
void main()
{
//These functions for operating on files are just made up
enum directory = "C:\SomeDir";
auto dirListing = getDirListing(directory);
foreach (i, file; dirListing.files)
{
file.setName("%s-%s".format(dirListing.name, i);
}
}
More information about the Digitalmars-d-learn
mailing list