On 2013-02-27 18:35, H. S. Teoh wrote:

Not sure who you're referring to here, but the reason reduce probably
will not change is because a lot of code relies on the current order of
parameters, and deliberately breaking that just for aesthetic (rather
than functional) reasons is not a good idea. It would be a different
story if the current order of parameters somehow makes it impossible to
implement some particular functionality. I agree that perhaps the
current situation is not perfect, but at least it's not a complete road
blocker.

That's the problem. Then we will have a language with a slightly inconsistent and inconvenient standard library.

Isn't that the same as:

        map!((obj x) { doSomething(x); return x; })(range)

?

I know it's not as pretty, but at least it's possible.

No it's not the same thing. "map" expects a range and returns a new range. "map" will pass each element from the range to the delegate and then return a new range of all elements returned for each call to the delegate.

"tap" on the other hand expects an object or value. It will then pass the object to the delegate and then return the object. Note that it doesn't return whats returned from the delegate. It will always return the object passed to "tap".

The most basic, non-templated implementation of "tap" would look like this:

Object tap (alias func) (Object o)
{
    func(o);
    return o;
}

class Point
{
    int x;
    int y;
}

Point createPoint ()
{
    return (new Point).tap!((p) { p.x = 3; p.y = 4 });
}

Again, my point was not that it's a bad idea to have isBlank. My point
was that if you add isBlank, then isPresent is redundant, and I would
argue even harmful. The best APIs are minimal ones, that provide all
*necessary* primitives with minimal overlap between them.

OK, then it was a misunderstanding, my bad. But with this philosophy it will not be as easy create quick scripts compared to scripting languages. This the original question, how to improve that in D.

--
/Jacob Carlborg

Reply via email to