Error handling 匹配错误或空结果
我有一个函数,返回节点列表的Error handling 匹配错误或空结果,error-handling,rust,pattern-matching,Error Handling,Rust,Pattern Matching,我有一个函数,返回节点列表的结果。我的意图是检查是否有错误或空向量提前返回,或者如果有列表,则继续 除其他外,这就是我正在尝试的,但是编译器抱怨x的类型 let nodes = list_nodes(client, &service); match nodes { Err(e) => { println!("Unable to list nodes: {:?}", e); return; }, Ok(x) if x.as_sl
结果
。我的意图是检查是否有错误或空向量提前返回,或者如果有列表,则继续
除其他外,这就是我正在尝试的,但是编译器抱怨x
的类型
let nodes = list_nodes(client, &service);
match nodes {
Err(e) => {
println!("Unable to list nodes: {:?}", e);
return;
},
Ok(x) if x.as_slice() == [] => {
println!("No nodes found for service: {}", service);
return;
}
_ => {}
}
错误是:
错误[E0282]:需要类型注释
-->src/main.rs:28:18
|
28 |如果x.as_slice()=[]=>{
|无法推断“A”的类型`
问题实际上是它无法推断[]
的类型。类型检查器不能假定这里的[]
具有与x相同的类型。因为PartialEq
特征(其中=
来自)允许右侧与左侧为不同类型的实例。您可以通过查看切片的长度,或者使用is_empty()
检查切片是否为空,轻松解决此问题:
此外,引用x
(使用ref x
,就像我上面所做的那样)将防止可能出现的另一个错误,避免在x
仍然属于节点时移动x
,问题实际上是它无法推断[]
的类型。类型检查器不能假设[]
此处的类型与x相同。与_slice()
相同,因为PartialEq
特性(其中==
来自)允许右侧为左侧不同类型的实例。您可以通过查看切片的长度,或者检查切片是否为空,并使用为_empty()
来轻松解决此问题:
另外,引用x
(使用ref x
,就像我上面所做的那样)将防止您可能遇到的另一个错误,避免在节点仍拥有时移动x
我认为您需要为上下文包含更多代码。例如,A
在错误消息中,但不在您的代码示例中。请查看@PeterHall,我的代码中没有A,您看到的是我从中获得的编译器,我无法提供更多的上下文。@Arkaitz,试试&x==&[]
。现在您正在比较切片引用和空数组。似乎current Rust stable将在错误消息中使用A
,而nightly将使用
,这比较容易混淆。我认为您需要为上下文包含更多代码。例如,A
在错误消息中,但不在您的代码示例中。请请参阅@PeterHall,我的代码中没有A,您看到的是我从编译器中获得的内容,我无法提供更多的上下文。@Arkaitz,请尝试&x==&[]
。现在您正在比较切片引用和空数组。似乎当前的Rust stable将在错误消息中使用A
,而nightly将使用\uu
,这比较容易混淆。谢谢!如果x为空(),我将使用Ok(ref x)
,因为不需要提取切片谢谢!我最终使用了Ok(参考x)如果x.为空()
,因为不需要提取切片
match nodes {
Err(e) => {
println!("Unable to list nodes: {:?}", e);
return;
},
Ok(ref x) if x.as_slice().is_empty() => {
println!("No nodes found for service: {}", service);
return;
}
_ => {}
}