gpt4 book ai didi

D 语言 : Are function signatures with constraints considered equal if they refer to the type directly or the parameter names?

转载 作者:行者123 更新时间:2023-12-05 00:38:10 25 4
gpt4 key购买 nike

鉴于以下函数签名(及其约束),它们会被视为相同吗?两者都通过了我的单元测试,所以我相信它们可能是,但我想知道它们是真正相同还是不同(但行为相同):

这里,签名约束指的是参数名称(我意识到运行时信息不可用,我的假设是编译器使用这些来指代 haystack 和 Needle 的类型):

T[] find(T, E)(T[] haystack, E needle) 
if(is(typeof(haystack[0] != needle) == bool))
{
// ...
}

现在,如果我更新以引用类型 T 和 E,它仍然有效。我更喜欢这种形式,因为它明确指出我的签名约束正在查看类型(而不是运行时信息)……而且它更简洁:
T[] find(T, E)(T[] haystack, E needle) 
if(is(typeof(T != E) == bool))
{
// ...
}

我的假设是正确的还是我遗漏了什么?

最佳答案

我个人会使用 if(is(typeof(T.init != E.init) == bool))确保它是关于类型的变量

(然后当您希望 T 成为一个范围(并且丢失数组符号时,它会是 if(isInputRange(T) && is(typeof(T.init.front != E.init) == bool)) )

编辑:测试此类事情的最佳方法是扩展测试用例:

如果我们采用不同的函数:

int binarySearch(T,E)(T[] haystack, E needle)
if(is(typeof(haystack[0] < needle) == bool)) {
//...
return -1;
}

这会按照您的预期进行编译和工作(除非实现细节......)


int binarySearch(T,E)(T[] haystack, E needle)
if(is(typeof(T < E) == bool)) {
//...
return -1;
}

不(调用 binarySearch([1,2,3],0); 不编译)

但是就像我原来的答案:
int binarySearch(T,E)(T[] haystack, E needle)
if(is(typeof(T.init > E.init) == bool)) {
//...
return -1;
}

这确实像预期的那样工作

关于D 语言 : Are function signatures with constraints considered equal if they refer to the type directly or the parameter names?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6021353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com