gpt4 book ai didi

swift - 如何让 Sequence 实现 Equatable?

转载 作者:行者123 更新时间:2023-11-28 11:36:27 24 4
gpt4 key购买 nike

我有以下最佳尝试:

extension Equatable where Self: Sequence, Self.Element: Equatable {
public static func == (lhs: Self, rhs: Self) -> Bool {
return lhs.elementsEqual(rhs)
}
}

但是好像不行。此外,它要求两个序列具有完全相同的类型,而我只想限制它们的 Element 类型相同。有什么办法吗?

最佳答案

协议(protocol)从不符合其他协议(protocol)。协议(protocol)可以要求其他协议(protocol)(我们通常称之为“协议(protocol)继承”),但这并不会使协议(protocol)符合其他协议(protocol)。协议(protocol)甚至都不符合自身,更不用说其他了。 Sequence.self 不能传递给需要 Sequence.Type 的事物。

在任何情况下,Equatable 都要求被比较的事物属于同一类型。 “equal”的其他含义不是 Equatable。

如果您想在“这两个序列具有相同的元素”之上构建方法,那很好。这就是 elementsEqual 已经为您所做的。但这并不能使它们等同。

您要尝试构建什么算法来使用这个和那个 elementEqual 尚未处理的算法?

您正在寻找的可能只是一些语法糖,使其看起来像 ==。那完全没有问题。您可以构建任何要实现 elementsEqual 的运算符。

infix operator ~=

func ~= <S1, S2>(lhs: S1, rhs: S2) -> Bool
where S1: Sequence, S2:Sequence,
S1.Element: Equatable, S1.Element == S2.Element
{
return lhs.elementsEqual(rhs)
}

我通常建议不要使用自定义运算符,但如果您正在做大量此类工作,那么显式的“这些序列在同一顺序中具有相同的值”运算符可能会非常有用。您只是不想使用 ==,因为这已经意味着一些这并不意味着的东西。例如,两个Set可能是==,但不是~=,所以你需要选择你所指的工具。

关于swift - 如何让 Sequence 实现 Equatable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55231527/

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