gpt4 book ai didi

swift - 运算符重载泛型 CollectionType 失败

转载 作者:行者123 更新时间:2023-11-28 07:01:20 25 4
gpt4 key购买 nike

我正在尝试重载 -= 运算符以获得与 CollectionType 和 SequenceType 上的 += 重载相同(但相反)的行为。但是,我在使用以下代码时遇到了麻烦:

func -=<Element, C : CollectionType where C.Generator.Element == Element>(inout lhs: [Element], rhs: C)
{
lhs = lhs.filter { !rhs.contains($0) }
}

func -=<Element, S : SequenceType where S.Generator.Element == Element>(inout lhs: [Element], rhs: S)
{
lhs = lhs.filter { !rhs.contains($0) }
}

不幸的是,它导致了 Cannot invoke 'filter' with an argument list of type '((_) -> _)' 的错误,这实际上只是转化为“错误争论,某处”。但考虑到函数签名中的通用约束,我无法弄清楚为什么传递给过滤器的闭包无效?

(这当然是 Swift 2.0)

最佳答案

contains() 要求元素是Equatable,所以你有将其添加为约束:

func -=<Element, C : CollectionType where C.Generator.Element == Element, Element : Equatable>(inout lhs: [Element], rhs: C)
{
lhs = lhs.filter { !rhs.contains($0) }
}

func -=<Element, S : SequenceType where S.Generator.Element == Element, Element : Equatable>(inout lhs: [Element], rhs: S)
{
lhs = lhs.filter { !rhs.contains($0) }
}

关于swift - 运算符重载泛型 CollectionType 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952630/

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