rust学习(二)

play on line  

match if  

 1 #![allow(unused)]
 2 fn write_bar(size: u64){
 3     match size{
 4         o if o < 100 => println!("{:?} less than 100", o),
 5         o if o < 200 && o > 100  => println!("{:?} between 100-200", o),
 6         _ => println!("{:?} bigger than 200", size),
 7     }
 8 }
 9 fn main() {
10     write_bar(10);
11     write_bar(150);
12     write_bar(250);
13 }
View Code

 println!("{:#?}", 1)

 1 #[derive(Debug)]
 2 struct Teacher<'a> {
 3     name: &'a str,
 4     age1: u8
 5 }
 6 
 7 #[derive(Debug)]
 8 struct Person<'a> {
 9     name: &'a str,
10     age: u8
11 }
12 
13 fn main() {
14     let name = "Peter";
15     let mut age = 27;
16     let peter = Person { name, age };
17     
18     age = 22;
19     let lilei = Teacher{ name:"Lilei", age1:age};
20     // 美化打印
21     println!("{:#?}", lilei);
22     println!("{:#?}", peter);
23 }
View Code

 println! with param

1 #[derive(Debug)]
2 struct Complex { real: f32, imag: f32 }
3 
4 fn main() {
5     println!("The big range is {big:#?} and the small is {small}",
6              small = 0,
7              big = &[1, 2]);
8     println!("Debug: {:#?}", Complex{real: 2.2, imag: 7.2});
9 }
View Code

 try! 宏和 ? 一样

write!(f, "{}", value)?; 
try!(write!(f, "{}", value));

闭包

|val| val + x, 输入和返回类型两者都可以自动推导,而输入变量 名必须指明。
  • 声明时使用 || 替代 () 将输入参数括起来。
  • 函数体定界符({})对于单个表达式是可选的,其他情况必须加上。
  • 有能力捕获外部环境的变量。
fn function (i: i32) -> i32 { i + 1 }
let closure_annotated = |i: i32| -> i32 { i + 1 };

  

valgrind 也可以检查rust的内存泄露

Drop trait 包含在 prelude 中,所以无需导入它。

 

  

posted @ 2019-07-31 00:02  lvmxh  阅读(400)  评论(0编辑  收藏  举报