Error handling fn foo()->;结果<;()>;抛出;应为2个类型参数“;
为什么编译这段代码时不允许Error handling fn foo()->;结果<;()>;抛出;应为2个类型参数“;,error-handling,rust,Error Handling,Rust,为什么编译这段代码时不允许Result?这是两个版本之间的突破性变化吗 fn run() -> Result<()> { let (tx, rx) = channel(); thread::spawn(move || { do_things_with_tx(&exit_tx); }); match exit_rx.recv() { Ok(result) => if let Err(reason)
Result
?这是两个版本之间的突破性变化吗
fn run() -> Result<()> {
let (tx, rx) = channel();
thread::spawn(move || {
do_things_with_tx(&exit_tx);
});
match exit_rx.recv() {
Ok(result) => if let Err(reason) = result {
return Err(reason);
},
Err(e) => {
return Err(e.into());
},
}
Ok(())
}
fn run()->结果{
let(tx,rx)=信道();
线程::生成(移动| |{
使用发送做事情(退出发送);
});
匹配出口_rx.recv(){
Ok(结果)=>如果让错误(原因)=结果{
返回错误(原因);
},
错误(e)=>{
返回Err(如into());
},
}
好(())
}
编者说:
error[E0107]:类型参数的数量错误:应为2,找到1
-->src/main.rs:1000:18
|
1000 | fn运行_wifi()->结果{
|^^^^^^^^^^^^^应为2个类型参数
当我将返回类型调整为Result
时,它会显示:
error[E0107]:类型参数数量错误:应为2,找到0
-->src/main.rs:1000:29
|
1000 | fn run()->结果{
|^^^应为2个类型参数
这来自于。结果的定义是,并且一直是,如下所示:
pub enum Result<T, E> {
Ok(T),
Err(E),
}
或者,一个仍然可以声称为原始结果类型的定义
pub type Result<T, E = Error> = Result<T, E>;
pub type Result=Result;
此模式非常常见,一些错误帮助器板条箱(如)将自动为声明的每个错误创建结果别名类型。
因此,如果您使用的库可能使用也可能不使用错误链
,则您应假定提及的结果
是特定于域的结果
的本地类型别名。如有疑问,在生成的文档页面中单击该类型将引导您找到具体定义(在本例中,别名)。来自第节
使用std::error::error;
使用std::fs::File;
fn main()->结果{
让f=File::open(“hello.txt”)?;
好(())
}
Rust follow semver,破坏更改意味着主要版本会生锈,因此如果你真的发现了回归,那就是一个bug。如果你能创建一个并指定两个显示回归的生锈版本,那么我就发现了一个问题,我找不到任何关于你当前打开的案例的信息。你在这里使用的是什么Result
类型?std::Result::Result
总是期望有两种类型的参数,而例如std::io::Result
只需要一个。在最后一种情况下,您在这个Result
中输入的Err
类型是什么?我只是在Rust Cookbook的目录遍历示例中点击了这个:
pub type Result<T, E = Error> = Result<T, E>;
use std::error::Error;
use std::fs::File;
fn main() -> Result<(), Box<dyn Error>> {
let f = File::open("hello.txt")?;
Ok(())
}