根据Apple发布的快速编程语言(Swift 3.0.1) iBook,比较运算符也适用于元组,只要它们不包含布尔值。所以给出以下声明
let t1 = (1, true)
let t2 = (1, true)
以下句子按预期抛出错误
t1 <= t2
然而
y1 == t2
评估为真,这似乎与上述声明相矛盾。 有什么想法吗?
答案 0 :(得分:8)
Bool
类型符合Equatable
,但不符合Comparable
通过实施的Swift Evolution提案
可以比较直到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
但是,使用Comparable
中蓝色打印的运算符无效(因为Bool
不存在此类运算符),因为两个tupes的第二个成员的类型都不符合{{1 }}
关于OP的评论:
似乎合乎逻辑。但该书列出了比较运算符
Comparable
,==
,!=
,>
, 等等,然后索赔。官方出版商是苹果公司。
<
(Equatable
,==
中蓝图的运算符可用于元组比较直到arity 6,因为所有元组成员都具有符合!=
的类型。但 意味着他们已自动访问Equatable
中Comparable
,<=
,<
,{{ 1}}),因为类型可能符合>=
但不符合>
。
然而,Equatable
协议继承自Comparable
,因此如果元组的成员都符合Comparable
(对于元组6的元组),那么所有六个比较运算符({ {1}},Equatable
,Comparable
,==
,!=
,<=
)可用于该元组,前两个通过协议继承来自{{ 1}},后四个通过<
本身(因为符合后者的类型也必须符合前者,通过协议继承)。
答案 1 :(得分:1)
比较运算符与相等运算符不同。您可以通过成员等式检查来检查元组是否相等。
对于某些类型,也存在比较运算符。但是,布尔值不是这种情况。哪个值应该更大,true
或false
?