Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Error handling 匹配错误或空结果_Error Handling_Rust_Pattern Matching - Fatal编程技术网

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;
    }
    _ => {}
}