根据apple发布的swift编程语言(Swift 3.0.1) iBook,比较运算符也适用于元组,只要它们不包含布尔值.所以给出以下声明
let t1 = (1, true) let t2 = (1, true)
以下句子按预期抛出错误
t1 <= t2
然而
y1 == t2
评估为真,这似乎与上述说法相矛盾.有任何想法吗?
Bool
确实符合Equatable
,但不符合Comparable
通过实施的Swift Evolution提案
SE-0015:元组比较运算符
可以比较到6的元组
等于(==
)和不等式(!=
),假设所有元组成员类型都符合Equatable
以及小于或等于(<=
),小于(<
),大于或等于(>=
),大于(>
),假设所有元组成员类型符合Comparable
现在,Int
和Bool
两个符合Equatable
,而只有Int
符合Comparable
.因此,比较元组
let t1 = (1, true) // inferred type: (Int, Bool) let t2 = (1, true)
因为两个成员都符合,所以平等/不平等是有效的Equatable
.
t1 == t2 // true t1 != t2 // false
但是,使用blueprinted的运算符Comparable
无效(因为不存在这样的运算符Bool
),因为两个tupes的第二个成员都有一个不符合的类型Comparable
.
关于OP的评论:
似乎合乎逻辑.但是,这本书列出了比较操作
==
,!=
,>
,<
,等再索赔.官方出版商是苹果.
由于所有元组成员都具有符合的类型,所以Equatable
(==
,!=
)中的蓝色运算符可用于元组6的元组比较Equatable
.但这并不意味着,然而,他们有自动获得在blueprinted运营商Comparable
(<=
,<
,>=
,>
),因为类型可以遵循Equatable
,但不是Comparable
.
该Comparable
协议,不过,从继承Equatable
,因此,如果一个元组的成员都符合Comparable
(元组达元数6),那么所有六个比较符(==
,!=
,<=
,<
,>=
,>
),都可以到元组,前两者通过协议的继承Equatable
,后四个通过Comparable
它自己(因为符合后者的类型也必须符合前者,通过协议继承).