如果您定义一个接受委托的函数,则 D 可以在您调用该函数时对委托参数进行类型推断。所以如果我写一个带有签名的函数:
void foo(void delegate(int,string) dlg)
我可以使用以下方法调用它:
foo((a,b){});
D 会推断出a
isint
和b
is string
。
但是,如果我事先不知道代表将有多少个参数怎么办?如果我写
void foo(T...)(void delegate(T) dlg)
我可以打电话:
foo((int a,string b,char c,boolean d){});
但是我必须为每个参数指定类型。
现在,我想foo
接受一个带有任意数量参数的委托——所有参数都相同。所以我可以打电话:
foo((a,b,c,d,e,f,g){});
D 会推断出a
tog
都是string
s。
请注意,我需要的不是可变函数。dlg
它本身不接受任何数量的参数,而是foo
接受具有任意数量参数的委托。
可以在D中做到这一点吗?
编辑:
实际上,如果我可以定义一个默认参数会更好,所以我可以写
foo((a,b,int c,d){});
and a
, b
andd
将是字符串,而c
will 是int
.