Rust基础语法
文章目录
- Rust输出到命令行
- 关于变量
- 常量vs不可变变量
- 数据类型
- 整数
- 浮点数
- bool
- 字符类型
- 复合类型
- 注释
Rust输出到命令行
输出到命令行主要可以使用println!()
和print!()
1. 这两个都有!
是因为他们并非是函数,而是宏,具体我们以后再介绍,普通函数是不需要加!
的
2. 两者的区别是是否会在行尾加一个换行符
3. 具体使用方法和C语言的printf
很像,但是是用{}
作为占位符
4. 并且会自动识别和填充参数,字符也可以写在{}
中
5. 也可以使用数字指定参数的位置
6. 转义字符是相同的,只有{
或者}
是需要对应的写两遍
例如
fn main(){
let a = 12;
let b = 24;
println!("a is {}", a);
println!("a is {a}");
println!("b is {1}, a is {0}", a, b);
println!("{{");
}
关于变量
Rust是强类型语言,也就是说他对于变量的限制非常严格,但是具有自动判断变量类型的能力
默认情况下Rust的变量是不可变的,除非使用mut
关键字声明为可变的变量
let a = 123; // 不可变
let mut b = 456; // 可变
声明变量使用let
关键字
上面的a是不可变变量,因此任何形式的重新赋值都是不被允许的
Rust的安全也就从此可以体现,从语言层面上尽可能少的让变量发生变化
常量vs不可变变量
不可变变量是可以这样用的
let a = 1;
let a = 2;
我们可以认为这个a是一个变量,可以使用let重新绑定,但是在绑定之前是不允许被改变的
const a:i32 = 123;
let a = 456;
这是不合法的
尽管rust编译器可以自动推断类型,但是有时候并非我们所期望的类型,可以手动指定
let a:u64 = 123;
数据类型
Rust的数据类型主要有以下几种
整数
位长度 | 有符号 | 无符号 |
---|---|---|
8bit | i8 | u8 |
16bit | i16 | u16 |
32bit | i32 | u32 |
64bit | i64 | u64 |
128bit | i128 | u128 |
arch(架构位数) | isize | usize |
除了支持0x
0o
0b
分别表示16、8、2进制以外,十进制还支持使用下划线作为分隔符方便阅读,例如985_211
,也可以用字节表示b'A'
浮点数
支持f32
和f64
,现代计算机对这两种浮点数处理速度几乎相同,但是64位的精度更高
bool
用bool表示,只能是true或者false,需要注意的是,这里相对于C/C++的限制更加严格,bool类型是无法和int类型进行隐式类型转换的
字符类型
使用char表示,大小位4字节,主要是因为是使用Unicode编码的,可以支持中英日韩表情符号零宽度空格,这些都是有效字符
复合类型
元组使用()
,是一组数据类型不一样的数据集合
数组使用[]
,是一组数据类型相同的数据结合
这两种类型的集合长度是不可变的,额外有一些用法如下
let tup = (1, '😀', 3.14);
let (x, y, z) = tup;
是可以进行结构化绑定的,使用时是tup.0
,表示0位置的元素
数组的类型是[i32; 5]
表示5个i32类型的数
let a: [i32; 5] = {1, 2, 3 ,4, 5}
初始化可以用[3; 5]
表示5个3
let a: [i32; 5] = [3; 5]
数组访问是a[3]
需要注意的是,数组和元组仍然是用mut
关键字
注释
注释和C++语言类似
//
/**/
///
都是合法的