Skip to content

第一节、变量

变量和赋值

Rust的变量都是有类型的,在定义的时候可以写上类型,也可以不写。 在没有写类型的情况下,编译器会自动推断出变量的类型。

定义变量

let x = 5;
定一个变量x,赋值整数5。这个时候编译器会推断出默认类型i32。整型的32位。

let x = 5;
x = 6; //这个操作会报错
因为上面的定义语法 x是不可修改的。如果想修改,可以用下面的方法

let mut x = 5;
x = 6;
//或者
let x = 5;
let x = 6; 
let x = "Hello os2edu" ; //甚至可以重新定类型

下面这个做法可行吗?

let mut x = 5;
x = 6; //A、可行吗?
x = "Hello" ;//B、可行吗?
let x = "Hello"; //C、可行吗?
答案:A可以,B不可以,因为A是赋值,B是改变类型,要想改变类型可以使用C。

常数

const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
常数不是一个变量,所以是不能更改的,不能重新赋值。

数据类型

int类型

Rust 整型

长度 有符号 无符号
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
128-bit i128 u128
arch isize usize
  • 有符号的取值范围是 -(2n - 1) 到 2n - 1 - 1 之间, 其中 n 是长度里面的位数. 例如:i8 就是 -(27) 到 27 - 1, 计算结果 -128 to 127.

  • 无符号类型 0 to 2n - 1, 例如: u8就是 0 to 28 - 1, 计算结果是 0 to 255.

“arch”:如果您使用的是 64 位架构,则为 64 位;如果您使用的是 32 位,则为32 位架构。

Rust整型的进制表示

Number literals Example
Decimal 98_222
Hex 0xff
Octal 0o77
Binary 0b1111_0000
Byte (u8 only) b'A'

十进制 98_222 ,就是98222。

浮点类型

Rust 也有两种用于浮点数的原始类型,它们是带小数点的数字。Rust 的浮点类型是f32和f64,它们的大小分别为 32 位和 64 位。默认类型是f64 因为在现代 CPU 上它的速度大致相同,f32但精度更高。所有浮点类型都是有符号的。

这是一个显示实际浮点数的示例:

文件名:src/main.rs

fn main() {
    let x = 2.0; // f64

    let y: f32 = 3.0; // f32
}

布尔型

    let t = true;
    let f: bool = false;

字符类型

Rust 的char类型是该语言最原始的字母类型。下面是一些声明char值的例子:

    let c = 'z';
    let z = 'ℤ';
    let heart_eyed_cat = '😻';

char字符类型和字符串类型是不能做替换的。字符型占固定的4个字节空间。 而字符串的每个字是utf-8,utf-8是1-4可变长度。英文字母是1个字节,而汉字是1-3个字节,更多的是3个字节。

复合类型

元祖类型

    let tup: (i32, f64, u8) = (500, 6.4, 1); #定义
    let tup = (500, 6.4, 1);

    let (x, y, z) = tup;

    println!("The value of y is: {}", y); //6.4

    let x: (i32, f64, u8) = (500, 6.4, 1);
  // 通过下标获取某个元素
    let five_hundred = x.0; //500

    let six_point_four = x.1; //6.4

    let one = x.2; // 1

元祖类型定义好之后是不可变长,不可以修改的。他的下标是.+序号。上文中x.0就是元祖的第一个内容。

数组类型

let a = [1, 2, 3, 4, 5];
let months = ["January", "February", "March", "April", "May", "June", "July",
              "August", "September", "October", "November", "December"];
let a: [i32; 5] = [1, 2, 3, 4, 5]; //定义i32类型的数组,长度为5
let first = a[0]; //数组的下标
let second = a[1];
 let n = a[6]; //这里会报错,越界了