我正在尝试将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): 错误: 模板实例sort!("b<a") sort!("b<a")与模板声明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
需要额外的模板参数吗?
pipe
模板应该将该参数传递给第一个管道函数,但我发现事实并非如此。 - Idan Aryepipe
永远无法做到这一点,因为可以将其与参数分开(alias pipe!(f) piped;
,然后许多行后piped([1,2,3]);
)。 - kennytmpiped
本身成为一个带模板参数的函数吗? - Idan Arye