D 语言关联数组获取第一个键值对的键:解决编译错误
这段代码的目的是定义两个函数 array_key_first 和 array_key_last,用于从一个关联数组中获取第一个和最后一个键值对的键。但是在调用 array_key_first 函数时,编译器报错了。
错误信息中提到了 std.range.primitives.front 函数,它是一个用于获取范围的第一个元素的标准库函数。但是在这个代码中,调用的不是标准库函数,而是自定义的函数。问题出在函数参数的类型上。
在调用 array_key_first 函数时,传入的参数类型是 int[string],也就是一个键为字符串类型,值为整型类型的关联数组。但是函数定义中的参数类型是 auto ref V[K] old,其中 V 代表值类型,K 代表键类型。因此编译器无法匹配参数类型,导致编译错误。
要解决这个问题,可以将函数的定义改为 K array_key_first(K,V)(auto ref V[K] old),将键类型放在第一个参数位置,值类型放在第二个参数位置。同时在调用函数时,也需要将键类型作为模板参数传入。修改后的代码如下:
import std.stdio;
import std.algorithm;
import std.range;
K array_key_first(K,V)(auto ref V[K] old)
{
return front(old);
}
K array_key_last(K,V)(auto ref V[K] old)
{
return back(old);
}
void main()
{
auto arr = ['Foo' : 1, 'Bar' : 2, 'Baz' : 3];
auto newArr = array_key_first!(string, int)(arr);
writeln(newArr); // 输出:Foo
}
原文地址: https://www.cveoy.top/t/topic/oikx 著作权归作者所有。请勿转载和采集!