我写了一个像这样的litle swift函数:
func compareTest(values: [[Double]]) {
if(values == [[1.0,2.0]]) {
// some code
}
}
但是当我尝试编译时,我在比较中得到一个错误:
二元运算符==不能应用于两个[[Double]]操作数。
我在这里搜索问题。大多数答案是错误消息具有误导性,人们使用了错误的类型(Example Question)。
有人帮助我,我写的类型不正确吗?
答案 0 :(得分:3)
在这种情况下,没有任何误导。
通常,var epsilon = 0.00000001;
if(fabs(v1-v2)< epsilon){ // values are considered equal
}
运算符是为==
项定义的。这允许将两个Equatable
值相互比较,例如, Double
。
然后我们在1.0 == 1.0
项的数组上定义了一个特定的==
运算符:
Equatable
这意味着您可以将任何数组与可等项目进行比较。但是,数组本身不是 public func ==<Element : Equatable>(lhs: [Element], rhs: [Element]) -> Bool
。
没有为嵌套数组定义此类运算符。
您必须定义:
Equatable
答案 1 :(得分:-2)
我不熟悉Swift,但作为任何语言的一般规则,不应使用相等运算符来比较双值。相反,如果两个双值的绝对算术差小于epsilon
,则应认为它们相等tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::host_name(),"");
tcp::resolver::iterator it=resolver.resolve(query);
while(it!=tcp::resolver::iterator())
{
boost::asio::ip::address addr=(it++)->endpoint().address();
std::cout<<addr.to_string()<<std::endl;
}