Macro std::try 1.0.0[−][src]
macro_rules! try { ($expr:expr $(,)?) => { ... }; }
👎 Deprecated since 1.39.0:
use the ? operator instead
Expand description
解开结果或传播其错误。
添加了 ? 运算符来替换 try!,应该用它来代替。
此外,try 是 Rust 2018 中的保留字,因此如果必须使用它,则需要使用 原始标识符语法: r#try.
try! 匹配给定的 Result。对于 Ok 成员,表达式具有包装值的值。
对于 Err 成员,它检索内部错误。try! 然后使用 From 执行转换。
这样可以在特殊错误和更常见错误之间进行自动转换。
然后立即返回产生的错误。
由于提前返回,因此只能在返回 Result 的函数中使用 try!。
Examples
use std::io; use std::fs::File; use std::io::prelude::*; enum MyError { FileWriteError } impl From<io::Error> for MyError { fn from(e: io::Error) -> MyError { MyError::FileWriteError } } // 快速返回错误的首选方法 fn write_to_file_question() -> Result<(), MyError> { let mut file = File::create("my_best_friends.txt")?; file.write_all(b"This is a list of my best friends.")?; Ok(()) } // 快速返回错误的先前方法 fn write_to_file_using_try() -> Result<(), MyError> { let mut file = r#try!(File::create("my_best_friends.txt")); r#try!(file.write_all(b"This is a list of my best friends.")); Ok(()) } // 这等效于: fn write_to_file_using_match() -> Result<(), MyError> { let mut file = r#try!(File::create("my_best_friends.txt")); match file.write_all(b"This is a list of my best friends.") { Ok(v) => v, Err(e) => return Err(From::from(e)), } Ok(()) }Run