可変長パラメータ
calculate()
関数が可変数のパラメータを受け取ることができるようにするには、そのパラメータリストに、Calculation
のスライスと、その後に...
を続けて含める必要がある。
double[] calculate(Calculation[] calculations...) {
 double[] results;

 foreach (calculation; calculations) {
 final switch (calculation.op) {

 case Operation.add:
 results ~= calculation.first + calculation.second;
 break;

 case Operation.subtract:
 results ~= calculation.first - calculation.second;
 break;

 case Operation.multiply:
 results ~= calculation.first * calculation.second;
 break;

 case Operation.divide:
 results ~= calculation.first / calculation.second;
 break;
 }
 }

 return results;
}
各計算はループ内で評価され、その結果はdouble[]
型のスライスに追加される。
以下にプログラム全体を示す:
import std.stdio;

enum Operation { add, subtract, multiply, divide }

struct Calculation {
 Operation op;
 double first;
 double second;
}

double[] calculate(Calculation[] calculations...) {
 double[] results;

 foreach (calculation; calculations) {
 final switch (calculation.op) {

 case Operation.add:
 results ~= calculation.first + calculation.second;
 break;

 case Operation.subtract:
 results ~= calculation.first - calculation.second;
 break;

 case Operation.multiply:
 results ~= calculation.first * calculation.second;
 break;

 case Operation.divide:
 results ~= calculation.first / calculation.second;
 break;
 }
 }

 return results;
}

void main() {
 writeln(calculate(Calculation(Operation.add, 1.1, 2.2),
 Calculation(Operation.subtract, 3.3, 4.4),
 Calculation(Operation.multiply, 5.5, 6.6),
 Calculation(Operation.divide, 7.7, 8.8)));
}
出力:
[3.3, -1.1, 36.3, 0.875]