什么是 Trait?
- Trait 告诉编译器: 某种类型具有那些功能
- Trait 抽象地定义共享行为
- Trait bounds(约束): 泛型类型参数指定为实现特定行为的类型
- like 接口
定义 Trait
- 把方法签名放在一起,来实现某种目的所必须的一组行为
- 关键字:
trait
- 只有方法签名,没有具体实现
- trait 可以有多个方法,以
;
结尾 - 实现该 trait 的类型必须提供具体的方法实现
大约 2 分钟
trait
;
结尾避免悬垂引用
let r;
{
let x = 1;
r = &x;
}
println!("{}", x)
声明方法
fn main(){
print!("hi,rust!");
function_name();
}
fn function_name(){
functiom_body;
}
函数参数:
fn main(){
function(5, 6);//实参
}
fn function(x: i32, y: u32){//形参
print!("The x is {}, the y is {}", x, y);
}
Stack 按值的接受顺序来储存,按相反的顺序将它们移除(后进先出 LIFO,LastIn FirstOut)
所有储存在 Stack 上的出局必须拥有固定一致的大小
Heap 内存组织性差一些
在用
,并返回一个指针,也就是这个内存的空间地址分配
存储数据
访问数据
函数调用: 当你的代码调用函数时,值被传入函数(也包括指向 heap 的指针). 函数本地的变量被压到 Stack 上. 当函数结束后,这些值会从 Stack 上弹出
else
表达式else if
,那么最好使用match
来重构代码let condition = true;
let number = if condition {5} else {6};//此时number被赋值 5
//let number = if condition {5} else {"6"};
//这样是错误的,rust必须知道number的确切类型
一个标量类型代表一个单个值
没有小数部分的数
u
开头,比如u32
i
开头,比如i32
Signed
,范围为−2n−1到2n−1UnSigned
,范围为0到2n−1模板
,里边有一些占位符
编译时
将占位符替换为具体的类型泛型函数
fn example<T>(value: &[T]) -> T {/*--snip--*/}
Result<T, E>
panic!
程序立即终止执行[profile.release]
panic = 'abort'