mapしたのをchainできないのでappenderを使う
import std.stdio, std.array, std.range, std.algorithm; int f(int e) { return e * -1; } void main() { int[] r = [-1,-2,-3,4,5,6]; { int[] a = [1,2,3], b = [4,5,6]; auto m = map!(f)(a); //auto x = chain(m,b); // chainがrangeのmを受け取ってくれない } { int[] a = [1,2,3], b = [4,5,6]; auto m = map!(f)(a); auto x = appender!(int[])(); //コンストラクタはrangeを受け取ってくれない x.put(m); //putならrangeを受け取ってくれる x.put(b); assert(x.data == r); } }
びっみょー!
可能かどうか考えていないけどコンストラクタがrangeを受け取ってくれたら x.put(m); なんていらないのに.
せめて put を void put(Range)(Range range); じゃなくて void put(Ranges...)(Ranges ranges); にしておくとか.
std.rangeとstd.arrayとstd.algorithm周り・・・というかrange周りはまだ作り込みが甘いのかな.