Coercing ranges to the same type
Matt Kline via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jul 6 12:46:50 PDT 2015
Say I'm trying to expand an array of file and directory paths
(such as ones given as command line args) into a range of file
paths I can iterate over. A simplified example might be:
auto getEntries(string[] paths, bool recursive)
{
auto files = paths.filter!(p => p.isFile);
if (recursive) {
auto expandedDirs = paths
.filter!(p => p.isDir)
.map!(p => dirEntries(p, SpanMode.depth, false))
.joiner
.map!(de => de.name); // back to strings
return chain(files, expandedDirs);
}
else {
return files;
}
}
Even though both return statements return a range of strings,
this doesn't compile because the result of `chain` is a different
type than the result of `filter`. Is there some generic range I
could coerce both ranges to in order to have the same return type
and make this work? .array is a non-starter since it throws out
the ranges' laziness.
More information about the Digitalmars-d-learn
mailing list