我想使用范围作为函数参数,即调用类似于:
foo(arr,1..23)
Run Code Online (Sandbox Code Playgroud)
在功能我想做的事情
int arr[22]
arr[21] = some_other_arr[<range>]
Run Code Online (Sandbox Code Playgroud)
其中<range>是1..23从上述呼叫.
那可能吗?我怎么要申报foo?
首先,1..23它不是一个范围 - 它只是特殊的语法,只能在foreach语句中使用.
该不作为同一甲范围1..23是iota(1, 23)从std.range; 它返回一系列连续值(例如整数).
要将范围传递给函数,通常需要使用模板:
void foo(Range)(Range r)
{
foreach (e; r)
writeln(e);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以按照你想要的方式打电话:
foo(iota(1, 23)); // print the numbers from 1 to 23 (exclusive)
Run Code Online (Sandbox Code Playgroud)
注意:如果arr是数组,并且您希望索引处有一系列值,1..23则可以使用切片:
foo(arr[1..23]);
Run Code Online (Sandbox Code Playgroud)
一个数组的片是一个范围.
要让函数接受此函数,您不需要使用模板.foo可写:
void foo(int[] r)
{
foreach (e; r)
writeln(e);
}
Run Code Online (Sandbox Code Playgroud)