On Thursday, 16 January 2020 at 17:03:33 UTC, mark wrote:
auto wordCharCounts = words // I added this and it works
fine
.map!"a.length";
writeln(wordCharCounts);
The string thing probably shouldn't be used anymore. I suggest
you always use the => form instead.
The string thing is a legacy version that was before the language
had =>.
I don't understand why both syntaxes work for .length but only
the string form for .count?
It is because of imports.
So the string version passes the string to the library, which
pastes it into some skeleton code and makes a function out of it.
It basically does:
string code = "import some_stuff; (a) { return " ~
your_string ~ "; }";
mixin(code);
Note it does this INSIDE the library.
It is that `import some_stuff;` that accounts for this
difference. The string one pastes in some library imports so some
functions are available. The => form does not.
Since the string one is inside the lib, it can NOT see your own
functions from your module! But since the lib imports a few other
library modules, it may be able to see things your module didn't
import.
The better way to do it is to use your => format, but go ahead
and import the necessary module.
I believe `count` is located in `import std.algorithm;`. So add
that to your module and it should work now.