- 变量与可变性
let关键字声明变量
let a = 1;//a的值不可变
let mut b = 2;//b的值可变
fn main(){
let mut b = 1;
println!("b = {}", b);
b = 2;
println!("b = {}", b);
}
常量(constant),绑定值以后也不可变
1.不可以使用mut
2.声明时使用const关键字,类型必须被标注
3.常量在任何作用域下都可声明包括全局作用域
//常量可以存在任意作用域
const MIN_POINTS:u32 = 100_000;
fn main(){
const MAX_POINTS:u32 = 100;
println!("MAX常量为:{}", MAX_POINTS);
println!("MIN常量为:{}", MIN_POINTS);
xzc();
}
fn xzc(){
println!("MIN常量为:{}", MIN_POINTS);
//println!("MAX常量为:{}", MAX_POINTS);//报错max为其他作用域中的定义
}
变量的隐藏(shadowing)
//rust中的变量隐藏
fn main(){
let a = 1;
let a = a + 1;
println!("a = {}", a);//a = 2
}
注意:
1.使用mut时给变量重新赋值需要和变量开始时的数据类型一致
2.而隐藏变量时则可以任意赋值不需要一致
fn main(){
let a= 1;
let a = "xzc";//可以实现
let mut b = 1;
b = "xzc";//报错
}
- 数据类型
fn main(){
let str = "42";
let num:u32 = str.parse().expect("xzc");//parse()后要加expect判断错误
//当类型较多时应明确类型u32或其他
println!("num = {}", num);//num = 42
}
- 标量类型
Rust有四个主要的标量类型:
--整数类型
无小数部分 u32就是一个无符号整数,占32位空间
无符号u开头,有符号i开头
--浮点类型
f32, 32位,单精度
f64, 64位,双精度(Rust上浮点数的默认类型)
--布尔类型
true 和 false,占用一个字节大小
符号是bool
--字符类型
char类型被用来描述最基础的单个字符
单引号,占4字节,表情也是单字符,例如'😊'
- 复合类型
--元组(Tuple)
可以将多个类型的多个值放在一个类型里
Tuple的长度固定,一旦声明无法改变
//创建Tuple
fn main(){
let tuple:(i32, i64, f64) = (500, 40, 4.55);
println!("{}, {}, {}", tuple.0, tuple.1, tuple.2);
}
//创建Tuple
fn main(){
let tuple = (500, 40, 4.55);
let (x, y, z) = tuple;
println!("{}, {}, {}", x, y, z);
}
--数组
也可以将多个值放在一个类型里
每个元素的类型必须相同
数组的长度也是固定的
//创建数组 数组用中括号
fn main(){
let a = [1, 2, 3, 4, 5];
println!("{}{}{}{}{}", a[0], a[1], a[2],a[3], a[4]);
}
数组没有vector灵活,一般情况下vector更常用
数组的类型:
[类型; 长度]
例如:let a:[i32; 5] = [1, 2, 3, 4, 5];
let a = [3; 4];等价于let a = [3, 3, 3, 3];