变量与可变性

1
2
3
4
5
6
// 错误
let x = 5;
println!("The value of x is {}", x);

x = 6; // cannot assign twice to immutable variable `x`
println!("The value of x is {}", x);
1
2
3
4
5
6
// 正确
let mut x = 5;
println!("The value of x is {}", x);

x = 6;
println!("The value of x is {}", x);

变量与常量

  • 常量(constant),常量在绑定值以后也是不可变的,但是它与不可变的变量有很多区别

    • 不可以使用mut,常量永远都是不可变

    • 声明常量使用const,它的类型必须被标注

    • 常量可以在任何作用域内进行声明,包括全局作用域

    • 常量只可以绑定到常量表达式,无法绑定到函数的调用结果或只能在运行时才能计算出的值

  • 在程序运行期间,常量在其声明的作用域内一直有效

  • 命名规范:Rust里常量使用全大写字母,每个单词之间用下划线分开

数据类型

标量类型

  • 整数类型
    • 没有小数部分
    • 无符号整数类型以u开头
      • u8
      • u32
      • u64
      • u128
      • usize
    • 有符号整数类型以i开头
      • i8
      • i32
      • i64
      • i128
      • isize
    • 有符号范围
      • -(2^n - 1)到2^(n - 1) - 1s
    • 无符号范围
      • 0到2^n - 1
    • 除了byte类型外,所有的数值字面值都允许使用类型后缀
      • 例如:57u8
    • u32是默认类型
  • 浮点类型
    • Rust有两种基础的浮点类型,含有小数部分的类型
      • f32,32位,单精度
      • f64,64位,双精度
    • Rust浮点类型使用了IEEE-754标准来表述
    • f64是默认类型,因为在现代CPU上f64和f32的速度差不多,而且精度更高
  • 布尔类型
    • 字面值true、false
    • bool
  • 字符类型
    • 字符类型的字面值使用单引号
    • 占用4字节大小
    • 是Unicode标量值,可以表示比ASCII多得多的字符内容:拼音、中日韩文、零长度空白字符,emoji表情等
      • U+0000到U+D7FF

复合类型

  • 元祖(Tuple)

    • 多个类型的多个值放在一个类型里

    • 长度是固定的,声明之后无法修改

    • let tup: (i32, f64, u8) = (500, 6.4, 1);
      
      println!("{} {} {}", tup.0, tup.1, tup.2);
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

      * 获取Tuple元素值

      * 可以使用模式匹配来解构

      ```rust
      let tup: (i32, f64, u8) = (500, 6.4, 1);

      let (x, y, z) = tup;

      println!("{} {} {}", x, y, z);
      * 可以使用点标记来访问
      1
      2
      3
      let tup: (i32, f64, u8) = (500, 6.4, 1);

      println!("{} {} {}", tup.0, tup.1, tup.2);
  • 数组

    • 声明数组

      • 在中括号里,各值用逗号分开

        1
        2
        3
        4
        let a = [1, 2, 3, 4, 5];

        // [类型; 长度]
        let b: [i32; 5] = [1, 2, 3, 4, 5];
    • 用处

      • 如果想让你的数据存放在stack上而不是heap上,或者想保证有固定数量的元素,这时使用数组更有好处
    • 数组没有Vector灵活

  • 函数

  • 注释

  • 控制流