该博文将持续跟进。
fn main() {println!("Hello, world!");
}
使用let 关键字进行声明:
let 变量名: 类型;
也可以同时赋初始值:
let 变量名: 类型 = 值;
编译器可对部分值的类型进行推导:
let 变量名 = 值;
i8、i16、i32,i64、i128、isize
u8、u16、u32、u64、u128、usize
isize、usize为平台相关类型
let num: i32 = 100;
debug 模式下变量溢出会panic
release 模式下变量溢出会形成环绕,即最大数+1会变成该类型最小的数。若想显示环绕则使用标准库Wrapping类型。
| 整数字面量 | 示例 |
|---|---|
| Decimal | 999_999 |
| Hex | 0xff |
| Octal | 0o77 |
| Binary | 0b1010_0101 |
| Byte (u8 only) | b’Z’ |
默认推导类型:i32
f32、f64
let num: f32 = 100.00;
浮点数遵循IEEE-754浮点数标准
默认推导类型:f64
bool
let is_false: bool = false;
char
let ch: char = 'a';
定义:
let tup: (i32, f32, bool) = (1, 2.0, true);
访问:
通过元组名.索引方式访问
tup.0、tup.1、tup.2
解构:
将元组拆分为多个变量
let (a, b, c) = tup;
定义:
let a = [1, 2, 3, 4, 5, 6];
let a: [i32;6] = [1, 2, 3, 4, 5, 6];
let a: [3;6];等价于let a = [3, 3, 3, 3, 3, 3];
访问:
通过索引访问
a[0]、a[1]
使用以上方式声明的变量均不可修改,对其赋值会提示编译错误,其体现了变量的不可变性。
error[E0384]: cannot assign twice to immutable variable `a`--> src\main.rs:31:5|
30 | let (a,b,c) = tup;| -| || first assignment to `a`| help: consider making this binding mutable: `mut a`
31 | a = 100;| ^^^^^^^ cannot assign twice to immutable variable
若想声明可变的变量则在let 后加 mut 关键字(mut: mutable)。
如:let mut a: i32 = 100;此时对a赋值a = 200;是允许的。
同一作用域内可以声明同名变量,下边的变量会隐藏上边的变量。即使类型不同也是可以的。
let a: i32 = 100;
let a: f32 = 100.0;
定义:
const MAX_POINTS: u32 = 100_000;
访问:
可访问,不可修改。
rust 使用函数使用“蛇形命名”,即小写字母和下划线的组合方式。
无参无返回值形式:
fn hello_rust() {println!("hello, rust!")
}
有参有返回值形式
fn add_one(num :i32) -> i32 {return num + 1;
}
函数内部可以定义函数
fn main() {fn add_one(num :i32) -> i32 {return num + 1;}println!("{}",add_one(1));
}
使用表达式作为函数返回值,不需写return和结尾分号
fn main() {println!("{}",add_one(1)); // 2
}fn add_one(num :i32) -> i32 {num + 1
}
语句以英文半角下的“;”结尾。
fn main() {let x = 15;let y = {let x = 20;x + 6};println!("{}",y);
}
x + 6 称之为表达式,x = 后边的20也是表达式 ,表达式一般用一对{}括起来(表示代码块),注意表达式结尾不写分号。