gpt4 book ai didi

swift - swift 中类型约束泛型函数的调用优先级?

转载 作者:行者123 更新时间:2023-12-05 06:12:41 34 4
gpt4 key购买 nike

我有定义:

    func compare<T>(lhs: T, rhs: T) -> Bool where T: Equatable {
return lhs == rhs
}

func compare<T>(lhs: T, rhs: T) -> Bool where T: AnyObject {
return lhs === rhs
}

func compare<T>(lhs: T, rhs: T) -> Bool {
return false
}

当我在一个也符合 Equatable 的引用类型对象上调用 compare 时,编译器如何决定调用这些函数中的哪一个?

一个完全接受的答案将链接到官方 swift 声明,解释优先级是如何完成的,特别是当通用符合两种不同的协议(protocol)时,这两种协议(protocol)都有专门化

最佳答案

无论出于何种原因,它对编译器来说都不是模棱两可的(我认为这是一个错误;请参阅下文了解我预期的错误),但对我们来说却是。所以写一个重载来阐明行为!

func compare<T: AnyObject>(lhs: T, rhs: T) -> Bool {
lhs === rhs
}

func compare<T: AnyObject & Equatable>(lhs: T, rhs: T) -> Bool {
compare(lhs: lhs as AnyObject, rhs: rhs)
}

func compare<T: Equatable>(lhs: T, rhs: T) -> Bool {
lhs == rhs
}

func compare<T>(lhs: T, rhs: T) -> Bool {
false
}
protocol ModuleName_A { }
protocol ModuleName_B { }

func ƒ<A: ModuleName_A>(_: A) { }
func ƒ<B: ModuleName_B>(_: B) { }

struct S: ModuleName_A & ModuleName_B { }

ƒ(S()) // Ambiguous use of 'ƒ'

关于swift - swift 中类型约束泛型函数的调用优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63570807/

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