match result { Ok(v) => v, Err(e) => return Err(e.into()) } 使用方式如下 use std::fs::File; use std::io::Read; fn read_file(name: &str) -> Result<String, std::io::Error> { let mut f = File::open(name)?; // 这里加了 ? 符号,如果发生错误会进行错误传播 let mut...
fnget_string_length(a:String)->usize{returna.len()}fnmain(){letv="hello".into();println!("length of hello is {}.",get_string_length(v));// 至此,`v`已经转移到函数内println!("{}",v);// 无法编译通过, error[E0382]: borrow of moved value: `v`} get_string_length本来只是想看...
file)//打印文件内容}funcreadFile(path string)(string,error){dat,err:=ioutil.ReadFile(path)//读取文件内容iferr!=nil{//判断err是否为nilreturn"",err//不为nil,返回err结果}returnstring(dat),nil//err=nil,返回读取文件内容
io::Error> {// 打开文件,f是`Result<文件句柄,io::Error>`let f = File::open("hello.txt");let mut f = match f {// 打开文件成功,将file句柄赋值给fOk(file) => file,// 打开文件失败,将错误返回(向上传播)Err(e) => return Err(e),};// 创建动态字符串slet mut s =...
error: could not compile `cargo_learn`. To learn more, run the command again with --verbose. 我们还可以使用match表达式来自定义对于返回值执行不同的操作: use std::fs::File; fn main() { let f = File::open("hello.txt"); let f = match f { ...
fnmain(){letmut s=String::from("hello");change(&mut s);}fnchange(some_string:&mut String){some_string.push_str(", world");} 不过可变引用有一个很大的限制:在特定作用域中的特定数据只能有一个可变引用,并且可变引用和不可变引用不应该同时存在(这两是互斥的关系)。
return Some(index); } } None } fn main() { let numbers = vec![10, 20, 30, 40, 50]; match find_first(&numbers, 30) { Some(index) => println!("Found at index: {}", index), None => println!("Value not found"),
thread'main'panicked at'error occured',src\main.rs:3:5note:runwith`RUST_BACKTRACE=1`environment variable to display a backtrace. 很显然,程序并不能如约运行到 println!("Hello, Rust") ,而是在 panic! 宏被调用时停止了运行。 不可恢复的错误一定会导致程序受到致命的打击而终止运行。
fnmain{ lets1 = gives_ownership; // gives_ownership moves itsreturn // value into s1 lets2 = String::from("hello"); // s2 comes into scope lets3 = takes_and_gives_back(s2); // s2 is moved into // takes_and_gives_back,whichalso ...
fn main() { let s1 = gives_ownership(); // gives_ownership moves its return // value into s1 let s2 = String::from("hello"); // s2 comes into scope let s3 = takes_and_gives_back(s2); // s2 is moved into // takes_and_gives_back, which also ...