Why is std.algorithm so complicated to use?
Jacob Carlborg
doob at me.com
Tue Jul 10 09:29:46 PDT 2012
On 2012-07-10 17:11, Christophe Travert wrote:
> What is wrong with foo.chain(["bar"])?
I think it conceptually wrong for what I want to do. I don't know if I
misunderstood ranges completely but I'm seeing them as an abstraction
over a collection. With most mutable collection you can add/append an
element.
> you might try this (untested)
>
>
> string function(Parameter) stringify = (x)
> {
> return (x.isConst? "const("~x.type~")": x.type)
> ~ (x.name.any?" "~translateIdentifier(x.name):"");
> }
>
> auto params = parameters
> .map!stringify()
> .chain(variadic? []: ["..."])
> .joiner(", ");
>
> context ~= params;
>
> I am not sure this will be more efficient. joiner may be slowed down by
> the fact that it is called with a chain result, which is slower on
> front. But at leat you save yourself the heap-allocation of the params
> array*.
>
> I would use:
> context ~= parameters.map!stringify().joiner(", ");
> if (variadic) context ~= ", ...";
>
> To make the best implementation would require to know how the String
> context works.
>
> *Note that here, stringify is not lazy, and thus allocates. It
> could be a chain or a joiner, but I'm not sure the result would really
> be more efficient.
String is a wrapper around str.array.Appender.
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list