Mapping with partial

Adam D. Ruppe via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Mar 30 11:23:30 PDT 2015


On Monday, 30 March 2015 at 18:07:18 UTC, matovitch wrote:
> kmeans_example.d(79): Error: template 
> std.algorithm.iteration.map

That error is easy: use points[].map!(test) instead of points.map.

Since points is a static array, it isn't a range. Static arrays 
can't be popped through. But if you slice it, then it yields a 
usable range for map.


The other problem though is the partial!(). It expects a template 
argument for the thing so it can make a new function right there 
at compile time... which doesn't work with a runtime variable.

The way I'd do it is just with a little hand written delegate. 
This will compile, for example:

       auto test = (ref Point p) => getRandomPoint(randVar, p);
       points[].map!(test);


and should do what you need.


More information about the Digitalmars-d-learn mailing list