我写了这样的litle swift函数:
func compareTest(values: [[Double]]) {
if(values == [[1.0,2.0]]) {
// some code
}
}
但是,当我尝试编译时,我会在比较时出现错误:
二进制运算符==不能应用于两个[[double]操作数。
我在这里搜索了问题。大多数答案是错误消息具有误导性,人们正在使用错误的类型(示例问题)。
有人可以帮我我写的类型不正确吗?
在这种情况下,没有任何误导。
通常为Equatable
项目定义了==
操作员。这允许将两个Double
值相互比较,例如1.0 == 1.0
。
然后,我们有一个在Equatable
项目数组上定义的特定==
操作员:
public func ==<Element : Equatable>(lhs: [Element], rhs: [Element]) -> Bool
这意味着您可以将任何数组与平等项目进行比较。但是,数组本身不是 Equatable
。
没有为嵌套数组定义的操作员。
您必须定义:
public func ==<Element : Equatable>(lhs: [[Element]], rhs: [[Element]]) -> Bool {
...
}
我不熟悉Swift,但作为任何语言的一般规则,不应使用平等操作员比较双重值。相反,如果它们的绝对算术差异小于Epsilon
,则应将两个双重值视为相等var epsilon = 0.00000001;
if(fabs(v1-v2)< epsilon){ // values are considered equal
}