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

swift中类型约束泛型函数的调用优先级?,swift,generics,swift5,Swift,Generics,Swift5,我有以下定义: func比较(lhs:T,rhs:T)->Bool其中T:equalable{ 返回lhs==rhs } func compare(lhs:T,rhs:T)->Bool其中T:AnyObject{ 返回lhs===rhs } 函数比较(左:T,右:T)->Bool{ 返回错误 } 当我对同样符合equalable的引用类型对象调用compare时,编译器如何决定调用这些函数中的哪一个 P>一个完整的可接受的答案将链接到官方SWIFT宣言,解释优先级是如何完成的,特别是当泛型符

我有以下定义:

func比较(lhs:T,rhs:T)->Bool其中T:equalable{
返回lhs==rhs
}
func compare(lhs:T,rhs:T)->Bool其中T:AnyObject{
返回lhs===rhs
}
函数比较(左:T,右:T)->Bool{
返回错误
}
当我对同样符合
equalable
的引用类型对象调用
compare
时,编译器如何决定调用这些函数中的哪一个


<> P><强>一个完整的可接受的答案将链接到官方SWIFT宣言,解释优先级是如何完成的,特别是当泛型符合两个不同的协议时,两个协议都有专门的< <强> < /P> > P>无论出于什么原因,它对编译器都是不含糊的(我认为这是一个bug,请参阅下面的我所期望的错误),但对我们来说是这样。因此,写一个重载来澄清行为

func比较(左:T,右:T)->Bool{
lhs===rhs
}
函数比较(左:T,右:T)->Bool{
比较(lhs:lhs作为任意对象,rhs:rhs)
}
函数比较(左:T,右:T)->Bool{
lhs==rhs
}
函数比较(左:T,右:T)->Bool{
假的
}
protocolmodulename_A{}
协议模块名称{u B}
funcƒ(_:A){}
funcƒ(_:B){}
结构S:ModuleName_A和ModuleName_B{}
ƒ(S())//ƒ的用法模棱两可

为什么不调用
比较
并检查调用的是哪一个?如果对象是类,则可能
equalable
将优先于
任何对象
任何对象
将优先于泛型。我认为你在那里的顺序正是你所期望的优先顺序。在这篇博文中有更多的信息:。。。一般的经验法则是,更具体的重载需要priority@NewDev,但尚不清楚
AnyObject
equalable
是否更具体,因为非对象类型也可以符合equalable,这意味着它们的集差不是空的(也就是说,另一个的子集也不是空的)@WinstonDu,
equalable
被认为比
AnyObject
更具体。。可能是因为对
AnyObject
的一致性是隐式的。。。主要的一点是,这是在编译时确定的,因为有时很难看到差异,所以最好小心,不要滥用重载