Rust learning note

Option<T>

像C#的nullable,就是使没有支持null(None)的数据类型增加null(None)这个取值,要用Some(x)进行解包

变量所有权

一个变量只能拥有一个可写的引用,但是可以拥有多个只读引用,读与写引用互斥.

栈上变量直接赋值,会直接复制,不会转移所有权.但是堆上变量赋值如果没有使用clone(),则会转移所有权,转移后原来变量名失去所有权,使用的话会在编译阶段报错

函数如果没有传引用的话,会把所有权转移到被调用函数中

生命周期

1
2
3
4
5
6
7
8
9
10
// 表示a,b和返回值有相同的生命周期
pub fn t3<'a, T> (a:&'a T, b:&'a T) -> &'a T
where T: cmp::PartialOrd
{
if a > b {
a
} else {
b
}
}

静态生命周期

1
let s: &'static str = "455";

trait

很像接口

1
2
3
4
5
6
7
8
9
10
11
12
13
pub trait Ahh {
fn say(&self) -> String {
String::from("ahhhhh")
}
}
pub struct Bhh {

}
impl Ahh for Bhh {
fn say(&self) -> String {
String::from("ffffff")
}
}