Rust基础 - 变量

Rust基础 - 变量

  • 摘要
  • 开始
    • 变量的可变性(Mutability)
    • 名称覆盖(Name Shadowing)
    • 常量

摘要

这是Rust语言的基础教程。本文讲解了Rust的变量、常量、名称覆盖(Shadowing)。

开始

开始学习Rust,让我们从一段简单的可执行的Rust代码开始。

fn main() {
    let a: i32 = 1024;
    let x = 2;
    let mut y = 2;
    const REPEAT_TIMES: i32 = 5;

    y *= x;
    println!("x is: {}, y is: {}.", x, y);
}

在Rust中,定义变量称之为将值绑定到名字

Rust使用let关键字来表示定义变量;这段代码定义了四个变量,分别是:a, x, y, REPEAT_TIMES。前三个变量都具有相同的类型(i32)。let a: i32 = 1024; 采用了完整的变量定义语法。而x, y则省略了数据类型。Rust是强类型语言,需要在编译时知晓值的类型,没有标注数据类型时,Rust根据值可以推断出类型。

变量的可变性(Mutability)

在定义x,y时,两者唯一的不同是,在定义y时多了一个紧接在let之后的mut关键字,这个关键字的含义是(mutable,可变的),即变量y的值是可变的,在后续代码逻辑中可以对y进行赋值操作。

在Rust中,使用let定义的变量,值是不可变的。如果要定义一个可以改变值的变量,则要使用let mut

let x = 3;
x += 1; // 错误!

let mut y = 3;
y += 1; // 正确

最后定义的REPEAT_TIMES是一个常量。到这里可以看到,Rust中出现了两种不可变的变量定义方式,使用const定义和使用let定义。它们的区别将在后面作出解释。

名称覆盖(Name Shadowing)

在Rust中,相同的变量名称可以重复使用,即重新定义相同的变量名称,而且可以定义为不同类型。

fn main() {
    let x = 1;
    let x = x + 1;
    println!("x is: {}.", x);
    let x = "Another type value";
    println!("Final is: {}.",x);
}

在开始两行代码中,首先定义变量x,值为1,然后重新定义x,并将前一个的值加一作为新的变量的值。则重新定义的x的值是2。最后再定义x时,其类型不再是数值类型(i32,32位有符号整型),而是字符串字面值(&str,字符串切片引用)。

常量

常量可以在任何地方声明。但与使用let声明的不可变的变量不同的是,

  • 常量声明时使用const关键字,且不能含有mut
  • 必须标注其类型。
  • 常量的值必须是常量表达式,即在编译时能够确定的。
  • 使用const定义的变量名称,不能被重新定义,覆盖。
const MAX_NUM: i32 = 2048;
let MAX_NUM: i32 = 2048; // 错误,常量名字不能被覆盖

以上是关于Rust变量的基本内容。

本篇文章以及之后可能的一系列关于Rust基础的文章,基本来源于学习Rust的官方文档之后的总结、笔记性文章。如果你对Rust也有兴趣,正打算学习,建议从官方文档开始。如果对博客文章内所涉及的内容有疑问,欢迎留言咨询。

本篇文章是我在CSDN发布的第一篇博客,比较短小,但我力求针对所写内容,尽量清楚地表达所想。如果有什么建议、意见或者疑问,欢迎留言。

谢谢!

你可能感兴趣的:(Rust基础)