rust 是强类型语言,全部变量、常量都必须有明确的数据类型;不少状况下,省略类型声明,编译器可自动推导,但不是全部状况下都会成功。数组
rust 有整型、浮点型、布尔型、字符型、数组、元组、枚举、结构体等数据结构,其中:数据结构
1、rust 中的变量值默认是不容许改变的,即不可二次斌值,以下代码没法经过编译,须要在变量前添加 mut 标识架构
fn main() { let zVar: i64 = 0; // let mut zVar: i64 = 0; zVar = 1; println!("{}", zVar); }
2、rust 中能够连续定义同名变量,新的变量将覆盖旧的变量,且先后的变量类型能够不一致:即 shadowing 特性。函数
fn main() {
let zvar: i32 = 0;
let zvar: i32 = zvar + 1;
let zvar: i32 = zvar * 2;
let zvar: &str = "Hello World!";
let zvar = zvar.len();
println!("{}", zvar);
}
3、rust 中常量定义必须显示指明数据类型,同一做用域内不可重名,局部定义覆盖全局定义。spa
const GLOB_NUM: f64 = 0.0; // 右值必须符合左值声明的数据类型,如指定 f64,但右值赋值为 1,则没法经过编译。 fn main() { let zvar: i32 = 0; let zvar: i32 = zvar + 1; let zvar: i32 = zvar * 2; let zvar: &str = "Hello World!"; let zvar = zvar.len(); const GLOB_NUM: f64 = 1.0; println!("{} {}", zvar, GLOB_NUM); }
4、结构体调试
fn main() { #[derive(Debug)] struct _T { a: i32, b: u64, } let mut _test = _T {a: 0, b: 0}; // 必须斌值,不然后续没法使用 _test.a = 8; _test.b = 8; println!("{} {}\n{:?}", _test.a, _test.b, _test); }
注:code
5、枚举blog
#[derive(Debug)] enum _T { _A(i32), _B(String), _C(i64, u32), _D, _E{x: i32, y: i32}, } impl _T { fn print_self(&self) -> i32 { println!("{:?}", self); 0 } } fn main() { let _var = _T::_D; let _var0 = _T::_E{x: 1, y:2}; _var.print_self(); _var0.print_self(); }
____作用域