变量
默认不可变 let name = "tom"
加上 mut
可变, let mut name = "sam"
数据类型
let age: u32 = 22
复合数据类型
就像 list
和 array
一样, 前者可以是混合类型, 后者必须类型统一
元组 tup
let x: (i32, f64, u8) = (500, 6.4, 1);
let tup = (500, 6.4, 1);
// 解构
let (x, y, z) = tup;
// 索引访问
let one = tup.2;
数组 array
let a = [1, 2, 3, 4, 5];
// 下标访问
let first = a[0];
函数
fn another_function() {
println!("Another function.");
}
语句(Statements)是执行一些操作但不返回值的指令
表达式(Expressions)计算并产生一个值
let y = {
let x = 3;
x + 1
};
fn plus_one(x: i32) -> i32 {
x + 1
}
流程
if
同 golang
一样, 条件语句没有括号
let number = 6;
if number % 4 == 0 {
println!("number is divisible by 4");
} else if number % 3 == 0 {
println!("number is divisible by 3");
} else if number % 2 == 0 {
println!("number is divisible by 2");
} else {
println!("number is not divisible by 4, 3, or 2");
}
loop {
println!("again!");
}
while number != 0 {
println!("{}!", number);
number = number - 1;
}
for number in (1..4).rev() {
println!("{}!", number);
}
所有权 ownership
Rust 中每一个值都有一个称之为其 所有者(owner)的变量。
值有且只能有一个所有者。
当所有者(变量)离开作用域,这个值将被丢弃。
引用类型拷贝
拷贝会使原变量失效
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1);
// 此时报错, 因为 s1 已经无效