gpt4 book ai didi

comparison - 支持 std.range.equal 的相等运算符

转载 作者:行者123 更新时间:2023-12-04 17:49:09 26 4
gpt4 key购买 nike

我很好奇为什么 D 开发人员提倡使用 std.range.equal在诸如此类的情况下

bool isPalindrome(Range)(in Range range) if 
(isBidirectionalRange!Range)
{
return range.retro.equal(range);
}

为什么不是相等运算符 ==用在这里代替?

另见: http://forum.dlang.org/thread/qdamjxisavsizvrdpecf@forum.dlang.org#post-qdamjxisavsizvrdpecf:40forum.dlang.org

最佳答案

相等运算符用于比较相同类型的对象,而范围通常具有截然不同的类型。

auto result = range1.equal(range2);

只要可以比较它们的元素,就会比较两个输入范围,而不管它们是什么类型,而
auto result = range1 == range2;

将要求两个范围属于同一类型,但这种情况很少发生。目前,甚至在很多情况下,应该被视为同一类型的两个范围不是,因为语言无法比较 lambda 函数以查看它们是否是相同的函数(远离字符串 lambdas 的严重缺点就像我们一样,因为可以比较字符串是否相等)。希望这会在 future 得到纠正,但它确实经常与 == 进行范围比较。即使你想也很难。

另外, ==不在范围 API 支持的操作集中。 range1 == range2如果两个范围是相同的类型(因为 == 是为所有类型定义的),则将编译,但它们可以比较引用相等或进行更深入的比较。这将完全取决于范围的实现。输入范围所需的只是此代码编译:
{
R r = void; // can define a range object
if (r.empty) {} // can test for empty
r.popFront(); // can invoke popFront()
auto h = r.front; // can get the front of the range
}

哪里 R是范围类型。对输入范围没有其他要求。所以,你不能依赖 ==为他们工作,而 equal使用输入范围 API 进行比较,因此将处理所有具有可比较元素的输入范围。

关于comparison - 支持 std.range.equal 的相等运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21849580/

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