我正在尝试将 D 的sort
函数作为模板参数发送给pipe
函数。当我在sort
没有模板参数的情况下使用它时:
import std.stdio,std.algorithm,std.functional;
void main()
{
auto arr=pipe!(sort)([1,3,2]);
writeln(arr);
}
但是,当我尝试使用sort
模板参数时:
import std.stdio,std.algorithm,std.functional;
void main()
{
auto arr=pipe!(sort!"b<a")([1,3,2]);
writeln(arr);
}
我收到一个错误 -main.d(5): Error: template instance sort!("b<a") sort!("b<a") does not match template declaration sort(alias less = "a < b",SwapStrategy ss = SwapStrategy.unstable,Range)
为什么会这样?sort!"b<a"
它自己工作,它具有与 相同的参数和返回类型sort
,那么为什么pipe
接受sort
但不接受sort!"b<a"
呢?我尝试做的事情是否有正确的语法?
更新
好的,我已经尝试包装该sort
功能。以下代码有效:
import std.stdio,std.algorithm,std.functional,std.array;
template mysort(string comparer)
{
auto mysort(T)(T source)
{
sort!comparer(source);
return source;
}
}
void main()
{
auto arr=pipe!(mysort!"b<a")([1,3,2]);
writeln(arr);
}
那么为什么原始版本不起作用?这是因为额外的模板参数sort
需要吗?