所以今天我正在摆弄D编程语言,但是找不到有关如何在std.array.replace
std.algorithm.map
的任何信息
void main() {
import std.stdio : writeln;
writeln(test([1, 2, 3])); // desired result: [1, 3, 4]
}
auto test(int[] data) {
import std.algorithm : map;
import std.array : replace;
return data.map!"a + 1"
.replace(2, 1);
}
不幸的是,这不起作用。相反,它失败并显示以下错误消息:
main.d(15):错误:模板std.array.replace与任何函数模板声明都不匹配。考生是:/usr/share/dmd/src/phobos/std/array.d(1652):std.array.replace(E,R1,R2)(E [] subject,R1 from,R2 to)if(isDynamicArray) !(E [])&& isForwardRange!R1&& isForwardRange!R2&&(hasLength!R2 || isSomeString!R2))
main.d(15):错误:模板std.array.replace(E,R1,R2)(E [] subject,R1 from,R2 to)if(isDynamicArray!(E [])&& isForwardRange!R1&& isForwardRange!R2&&(hasLength!R2 || isSomeString!R2))不能从参数类型推导出模板函数!()(MapResult!(unaryFun,int []),int,int)
std.algorithm.map
的文档说它使用延迟评估,但即使使用std.array.array
转换结果也不适合我。
我正在使用DMD 2.064.2。
答案 0 :(得分:4)
std.array.replace
适用于数组,而map
则返回一个范围。要将范围转换为数组(将为所有元素分配内存),请使用array
函数。
因此,您的示例变为:
return data.map!"a + 1"
.array
.replace(2, 1);