Rust by Example(chapter14)

Generics(泛型) Generics是Rust中的重要内容,能够最大化地减少代码的重复。fn foo<T>(arg: T) { ... }来定义一个函数,传入的参数为T。 1 2 3 4 5 6 7 8 9 10 11 12 struct Val{val: f64,}implVal{pubfn value(&self)-> &f64 {&self.val}}fn main(){letx=Val{val: 3.};lety=x.value();} trait(接口) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 //定义接口 traitHasArea{fn area(&self)-> f64;}struct Rectangle{length: f64,height: f64 }// 实现接口 implHasAreaforRectangle{fn area(&self)-> f64……

阅读全文

Rust by Example(chapter9-13)

模块 & crate & Cargo & Attributes 可见性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 mod my_mod{// 不可见 fn private_function(){println!("called `my_mod::private_function()`");}// 可见 pubfn function(){println!("called `my_mod::function()`");}// 可以嵌套 pubmod nested{pubfn function(){println!("called `my_mod::nested::function()`");}}}mod my{// struct默认是私有的 pubstruct OpenBox<T>{pubcontents: T,}#[allow(dead_code)]pubstruct ClosedBox<T>{contents: T,}impl<T>ClosedBox<T>{pubfn new(contents: T)-> ClosedBox<T>{ClosedBox{contents: contents,}}}} 包可见性 Crates 在Rust中,crates是一个compilation unit,默认是编译成可执行文件,如……

阅读全文

Rust by Example(chapter8)

函数 函数定义 1 2 3 fn fun(v:i32)-> i32{v+3} 定义类型以及返回类型,同时在Rust函数是一个表达式,也就是不需要return。 方法 1 2 3 4 5 6 7 struct Pair(Box<i32>,Box<i32>);implPair{fn destory(self){letPair(x,y)=self;println!("Destroying Pair({}, {})",x,y);}} 闭包(也称之为lambda表达式) 1 2 3 fn function(i: i32)-> i32 {i+1}letclosure_annotated=|i: i32|-> i32 {i+1};letone=||1; 下面看一下指针借用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 fn main(){lethaystack=vec![1,2,3];letcontains=move|needle|haystack.contains(needle);println!("{}",contains(&1));println!("{}",contains(&4));println!("There're {} elements in vec",haystack.len());// ^ Uncommenting above line will result in compile-time error // because borrow checker doesn't……

阅读全文

Rust by Example(chapter7)

Rust是一个现代的系统级编程语言,侧重于安全、速度和并发。 条件控制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 fn main(){letn=5;ifn<0{print!("{} is negative",n);}elseifn>0{print!("{} is positive",n);}else{print!("{} is zero",n);}letbig_n=ifn<10&&n>-10{println!(", and is a small number, increase ten-fold");10*n}else{println!(", and is a big number, halve the number");n/2};println!("{} -> {}",n,big_n);} loop循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 fn main(){letmutcount=0u32;println!("Let's count until infinity!");loop{count+=1;ifcount==3{println!("three");continue;}println!("{}",count);ifcount==5{println!("OK, that's enough");break;}}}fn main(){letmutcounter=0;letresult=loop{counter+=1;ifcounter==10{breakcounter*2;}};assert_eq!(result,20);} for 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15……

阅读全文

Rust by Example(chapter6)

Conversion Rust的核心就是traits,可以重载。 From and To 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 usestd::convert::From;#[derive(Debug)]struct Number{value: i32,}implFrom<i32>forNumber{fn from(item: i32)-> Self{Number{value: item}}}fn main(){letnum=Number::from(123);println!("{:#?}",num);letx=5;letnum: Number=x.into();println!("{:#?}",num);} 实现了From这个traits,就能够同时使用from以及into,用来从类型之间的转换。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 usestd::fmt;struct Circle{radius: i32 }implfmt::DisplayforCircle{fn fmt(&self,f: &mutfmt::Formatter)-> fmt::Result{write!(f,"Circle of radius {}",self.radius)}}fn main(){letcircle=Circle{radius: 6};println!("{}",circle.to_string());} 从String转变 1 2 3……

阅读全文

Rust by Example(chapter4-5)

变量绑定 简单的例子 1 2 3 4 //如果不使用会有警告 letnoisy_unused_variable=2u32;//前面添加了下划线就不会有警告 let_noisy_unused_variable=2u32; Mutability 如果申请一个变量可以变化的话,那么就需要 1 letmutmutable_binding=1; 变量作用域与变量名掩盖(Scope and Shadowing) 1 2 3 4 5 6 7 8 fn main(){leta=3;{leta=4;println!("{}",a);}println!("{}",a);} cast(强制转换) 1 2 3 4 5 6 7……

阅读全文

Rust by Example(chapter3)

Custom Types Rust中有两种自定义类型 struct enum struct 在结构体中,有三种struct的类型,分别为 元祖数据结构 类C struct unit struts 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #[derive(Debug)]struct Person<'a>{// 'a 表示生命周期,当Person生命结束了,那么name也结束了。 name: &'astr,age: u8,}struct Nil;struct Pair(i32,f32);struct Point{x: f32,y: f32,}// 取消禁用代码……

阅读全文

Rust by Example(chapter1)

Rust是一个现代的系统级编程语言,侧重于安全、速度和并发。 安装 1 curl--proto'=https'--tlsv1.2-sSfhttps://sh.rustup.rs | sh hello world 1 2 3 fn main(){println!("Hello World!");} 其中,println!是一个宏,功能是将字符串打印到终端。 编译方式如下 1 2 rustc hello.rs ./hello 或者使用 1 cargo run cargo是一个rust生态管理工具,我们在接下来的各种实例中都采用这种方式来运行我们的程序。 注释……

阅读全文

Rust by Example(chapter2)

Primitives(基本数据类型) Rust提供了几种数据类型 整数类型: i8, i16, i32, i64, i128 和isize(指针) 无符号整数类型: u8, u16, u32, u64, u128 和usize(指针) 浮点: f32, f64 char类型(4个比特) bool类型 元祖类型() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 fn main(){// Variables can be type annotated. letlogical: bool =true;leta_float: f64 =1.0;//……

阅读全文