📅  最后修改于: 2021-01-08 13:52:20             🧑  作者: Mango
OK
Err
Enum Result
{
OK,
Err,
}
让我们看一个简单的示例,该示例返回Result值:
use std::fs::File;
fn main()
{
let f:u32 = File::open("vector.txt");
}
输出:
在上面的示例中,Rust编译器显示该类型不匹配。 'f'是u32类型,而File :: open返回Result
让我们看一个简单的匹配表达式示例:
use std::fs::File;
fn main()
{
let f = File::open("vector.txt");
match f
{
Ok(file) => file,
Err(error) => {
panic!("There was a problem opening the file: {:?}", error)
},
};
}
输出:
程序说明
让我们看一个简单的例子:
use std::fs::File;
fn main()
{
File::open("hello.txt").unwrap();
}
输出:
在上面的示例中,unwrap()方法将自动调用panic宏和panic!显示错误信息。
让我们看一个简单的Expect()例子
use std::fs::File;
fn main()
{
File::open("hello.txt").expect("Not able to find the file hello.txt");
}
输出:
在上面的输出中,错误消息显示在我们在程序中指定的输出屏幕上,即“无法找到文件hello.txt ”,这使我们更容易从错误发生的地方查找代码。从。如果我们包含多个unwrap()方法,那么很难找到unwrap()方法引起恐慌的地方!一样惊慌!对所有错误显示相同的错误消息。
传播错误是一种将错误从一个函数转发到另一函数。错误会传播到调用函数,在调用函数中可以获取更多信息,以便可以处理错误。假设我们有一个名为“ a.txt”的文件,其中包含文本“ javaTpoint”。我们要创建一个对该文件执行读取操作的程序。让我们来研究这个例子。
让我们看一个简单的例子:
use std::io;
use std::io::Read;
use std::fs::File;
fn main()
{
let a = read_username_from_file();
print!("{:?}",a);
}
fn read_username_from_file() -> Result
{
let f = File::open("a.txt");
let mut f = match f {
Ok(file) => file,
Err(e) => return Err(e),
};
let mut s = String::new();
match f.read_to_string(&mut s) {
Ok(_) => Ok(s),
Err(e) => Err(e),
}
}
输出:
程序说明
指某东西的用途 '?'运算符可减少代码的长度。 '?'运算符是替换匹配表达式表示“?”运算符的工作方式与匹配表达式的工作方式相同。假设我们有一个名为“ a.txt”的文件,其中包含文本“ javaTpoint”。我们要创建一个对该文件执行读取操作的程序。让我们来研究这个例子。
让我们看一个简单的例子。
use std::io;
use std::io::Read;
use std::fs::File;
fn main()
{
let a = read_username_from_file();
print!("{:?}",a);
}
fn read_username_from_file() -> Result
{
let mut f = File::open("a.txt")?;
let mut s = String::new();
f.read_to_string(&mut s)?;
Ok(s)
}
输出:
在上面的示例中,“?”在“结果”值类型之前使用运算符。如果Result是OK,则返回OK变量的值,如果Result是Err,则返回错误信息。
我们甚至可以通过在'?'之后使用链接方法调用来进一步缩短程序代码。运算符。
让我们看一个简单的例子:
use std::io;
use std::io::Read;
use std::fs::File;
fn main()
{
let a = read_username_from_file();
print!("{:?}",a);
}
fn read_username_from_file() -> Result
{
let mut s = String::new();
File::open("a.txt")?.read_to_string(&mut s)?;
Ok(s)
}
输出:
程序说明
在上面的示例中,我们将read_to_string()的调用链接到File :: open(“ a.txt”)?的调用结果。我们将'?' read_to_string()调用结束时的运算符。如果两个函数(即read_to_string()和File :: open(“ a.txt”))都成功,则返回OK值,否则返回错误值。
'?'运算符只能在返回Result类型值的函数中使用。作为“?”运算符的作用类似于匹配表达式。 match表达式仅适用于Result返回类型。
让我们通过一个简单的例子来理解这一点。
use std::fs::File;
fn main()
{
let f = File::open("a.txt")?;
}
输出: