D语言以下代码import stdstdio;import stdalgorithm;import stdrange;K array_key_firstVKauto ref VK old return frontold;K array_key_lastVKauto ref VK old return backold;void main auto arr = Foo 1 Bar
这段代码的目的是定义两个函数 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/fvCx 著作权归作者所有。请勿转载和采集!