On 17.07.2011 19:28, Robert Clipsham wrote:
I've just begun updating my code to work with 2.054 and noticed that
quite a few things have been deprecated - some without a decent
replacement. Could the phobos team not make a habit of this please?
Example:
Before:
----
foreach (file; listDir(".", "*.d") ~ listDir("./foo/", "*.c"))
{
// Do something
}
----
After (sorry about the awkward indentation):
----
void doSomething(string file)
{
// Do something
}
foreach (string file;
filter!`endsWith(a.name,".d"))`(
dirEntries(".",SpanMode.depth))
{
doSomething(file);
}
foreach (string file;
filter!`endsWith(a.name,".c")`(
dirEntries("./foo/",SpanMode.depth))
{
doSomething(file);
}
----
Also note that you can't use dirEntries() ~ dirEntries() or
chain(dirEntries(), dirEntries()) as DirIterator is not a range.
DirIterator is a range as of 2.054. And as being responsible for this
little upgrade let me show how to fix dirEntries() ~ dirEntries()
problem e.g.:
auto a = array(map!"a.name"(dirEntriies("."))); // does give you an
array of file names
And definitely you should be able to chain them :)
Combining map and filter to archive your goal seem like a long way to
solve a simple problem, but IMO it's not that bad and far more flexible.
It might be a good idea to just make listDir to be this one-liner under
the hood, I wasn't behind the whole deprecation idea.
If things in phobos are going to be deprecated, could you make sure
that a decent replacement for *all* use cases is in place before hand?
It would also be nice to add into the documentation how to use the
replacement functions to the same effect - it took me forever to
figure out how to replace listDir with dirEntries.
--
Dmitry Olshansky