Swift 中的元组似乎符合
Comparable
,因为我得到了这些结果:
print ( (3,0) < (2,10000) ) // false
print ( (0,0,5) < (0,0,7) ) // true
它似乎对元组进行从左到右的逐个成员比较:它将第一个元组成员相互比较,然后是第二个,依此类推,直到找到一对不相等的元素,并返回是否该对中的第一个成员小于第二个。非常有道理。
它甚至适用于包含多种类型的元组,只要它们具有可比性,并且只要被比较的两个元组属于同一类型:
print( ("a",4) < ("b",3) ) // true
那么为什么会出现错误?
print ( [(1,2),(0,2)].max() ) ⛔️ Type '(Int, Int)' cannot conform to 'Comparable'
认为如果我显式声明类型可能会有所帮助,我尝试了:
typealias IntPair = (Int,Int)
let a: IntPair = (0,1)
let b: IntPair = (0,2)
let array: [IntPair] = [a,b]
print(array.max()) ⛔️ Type '(Int, Int)' cannot conform to 'Comparable'
我唯一的结论是静态函数
<
是在相同类型的元组上定义的,其组件都是Comparable
,但这些元组仍然不符合Comparable
。但这似乎不太可能。
有谁知道为什么
max()
不适用于参数均为 Comparable
的相同类型元组数组?
不!只有名义(“命名”)类型才能符合协议,其中不包括元组。
标准库恰好为最多 8 个元素的元组定义了
<
运算符。