まとめて配列

しばらく更新しない間にD言語の方が更新されていた。
遅延評価はなにやらすごそうだけど、価値が判断できん。(Haskell知らないので)
配列リテラルと、可変個テンプレート型引数が嬉しい。

で、こんなのを作ってみた。

char[] ToString(T1, T2, TA...)(T1 value1, T2 value2, TA values) {
	const char[] delim = ", ";
	char[] buffer = ToString(value1) ~ delim ~ ToString(value2) ~ delim;
	foreach (v; values) {
		buffer ~= ToString(v);
		buffer ~= delim;
	}
	if (buffer.length > delim.length) buffer = buffer[0..length-delim.length];
	return buffer;
}

で、実験。

{
	mixin Map!(char[], int);
	ToString(
		'A',
		0,
		3.14,
		2.71 + 3.2i,
		[1, 2, 3],
		[1.1, 2.2, 3.3],
		Map(
			Entry("AAA", 1),
			Entry("BBB", 2),
			Entry("CCC", 3)
		)
	).writefln();
	ToString(1).writefln();
	ToString(1, 2, 3).writefln();
	[1, 2, 3].ToString().writefln();
}
...
A, 0, 3.14, 2.71+3.2i, [1,2,3], [1.1,2.2,3.3], [(AAA:1),(BBB:2),(CCC:3)]
1
1, 2, 3
[1,2,3]

お〜、でけてるでけてる。

しっかし、型の違うものを配列につっこんで、foreach でぐるぐる回せるってぇのはすっごいな。Tuple もなぁんも定義してないのに。