improving std.array.array

monarch_dodra monarchdodra at gmail.com
Sun Jul 22 08:54:42 PDT 2012


On Sunday, 22 July 2012 at 13:04:18 UTC, David Nadlinger wrote:
> I hit some of the problems you described a little while ago. 
> Jonathan and I came to the conclusion that the best solution is 
> to default to the same element type as the passed range, while 
> allowing any type which the element type is convertible to to 
> be specified via an extra template parameter, just as you 
> proposed.
>
> I have a half-finished version (sans handling of narrow 
> strings) lying around, but won't have time to polish it up for 
> inclusion in the next few weeks, so feel free to go ahead.
>
> David

Yeah, I saw your posts regarding that. I hope I won't hit any 
problems with my implementation.

> What about
>
> import std.conv: to;
> auto integralThirds = iota(1,20).map(a => to!int(a/3)).array;
>
> ?
>
> It even allows converting to strings, which is something I do 
> very often.

While I won't argue the result is not the same, the intent is not 
as clear (IMO).

Suppose the function I wanted to apply was not anonymous, but 
"foo":

Your approach:
auto ints = iota(1,20).map(a => to!int(foo(a))).array;
or
auto ints = iota(1,20).map(foo).map(a => to!int(a)).array;

Which (IMO) really doesn't quite translate the intent as well as:
auto ints = iota(1,20).map(foo).array!int;

----
I think the bottom line about array is that it requires trivial 
simplicity.


More information about the Digitalmars-d mailing list