Error handling 是我对以下内容的理解;reqwest“;代码正确吗?
我一直在玩弄铁锈,遇到了以下代码:Error handling 是我对以下内容的理解;reqwest“;代码正确吗?,error-handling,rust,http-get,reqwest,Error Handling,Rust,Http Get,Reqwest,我一直在玩弄铁锈,遇到了以下代码: fn request(&url) -> Result<(), Box<dyn std::error::Error>> { let mut res = reqwest::get(&url)?; let mut body = String::new(); res.read_to_string(&mut body)?; println!("Status: {}", res.status());
fn request(&url) -> Result<(), Box<dyn std::error::Error>> {
let mut res = reqwest::get(&url)?;
let mut body = String::new();
res.read_to_string(&mut body)?;
println!("Status: {}", res.status());
println!("Headers:\n{:#?}", res.headers());
println!("Body:\n{}", body);
Ok(())
}
定义一个可变变量,用于存储来自reqwest
cratet的get
方法的响应对象
let mut body = String::new();
定义一个可变变量来存储responseText字符串
res.read_to_string(&mut body)?;
此方法将responseText
存储在body
变量中
println!("Status: {}", res.status());
println!("Headers:\n{:#?}", res.headers());
println!("Body:\n{}", body);
打印包含响应状态、标题和正文的三个格式化字符串(带尾随新行)
Ok(())
通过结果处理错误
问题:
Result中的空括号是什么意思?你的理解完全正确
结果是一个枚举,它可以是“Ok”或“Err”-如果Ok,那么可能有一些okayness值(结果、响应、数据、输出等);类似地,如果出现错误,那么您可能需要传达一些具体的错误。有了这些,让我们把结果分解一下
应该这样读:结果
。这两个子类型可以是任何东西,但它们必须是某种东西——不能忽略它
因此,如果typeofvalueifok
必须是某个值,但如果不想返回某个值,则可以返回空值。这就是结果中的()
。它只是有效地说“当一切顺利时,我什么也不回报”
因此,第二部分TypeOfErrorWhenNotOkay
也可以是任何类型-一个字符串,一个int,等等。它有助于该类型实现std::error::error
trait,帮助调用者标准化一点
返回“某个动态对象,但它实现了traitstd::error::error
”,如果要在调用方堆栈上返回该值,则需要Rust知道该值的确切大小(需要调整调用方堆栈的大小以接受该值)
这就是框
类型出现的地方-它将实际值推送到堆上,并持有指向它的指针(无论堆上的实际值如何,指针的大小都可以是可预测的固定值)。
是一种保证,无论装箱值是什么,它都实现了错误特性
所以现在最后的Ok(())
是有意义的。如果读取Ok(value)
:它表示结果枚举是变量Ok
,值为“empty tuple”()
,即无
你的理解完全正确
结果是一个枚举,它可以是“Ok”或“Err”-如果Ok,那么可能有一些okayness值(结果、响应、数据、输出等);类似地,如果出现错误,那么您可能需要传达一些具体的错误。有了这些,让我们把结果分解一下
应该这样读:结果
。这两个子类型可以是任何东西,但它们必须是某种东西——不能忽略它
因此,如果typeofvalueifok
必须是某个值,但如果不想返回某个值,则可以返回空值。这就是结果中的()
。它只是有效地说“当一切顺利时,我什么也不回报”
因此,第二部分TypeOfErrorWhenNotOkay
也可以是任何类型-一个字符串,一个int,等等。它有助于该类型实现std::error::error
trait,帮助调用者标准化一点
返回“某个动态对象,但它实现了traitstd::error::error
”,如果要在调用方堆栈上返回该值,则需要Rust知道该值的确切大小(需要调整调用方堆栈的大小以接受该值)
这就是框
类型出现的地方-它将实际值推送到堆上,并持有指向它的指针(无论堆上的实际值如何,指针的大小都可以是可预测的固定值)。
是一种保证,无论装箱值是什么,它都实现了错误特性
所以现在最后的Ok(())
是有意义的。如果读取Ok(value)
:它表示结果枚举是变量Ok
,值为“empty tuple”()
,即无
()是单位类型和单位值。长方体是特征对象。有关键字搜索可能会有帮助。()是单位类型和单位值。长方体是特征对象。也许搜索关键词会有帮助。谢谢你花时间回答我的问题,我很感激。另外,欢迎来到StackOverflow!谢谢你花时间回答我的问题,我很感激。另外,欢迎来到StackOverflow!
println!("Status: {}", res.status());
println!("Headers:\n{:#?}", res.headers());
println!("Body:\n{}", body);
Ok(())