今天看了Rust的变量相关内容,Rust变量很重要的一个设计点是: Rust变量默认是不可变的。
很难理解? 我们接下来一起研究一下Rust的变量, 在Rust中变量是通过关键字let进行声明的
let x = 5;
上述语句就是定义了一个名称为x的变量,变量的值为5,而这个x是不可变的,当我们尝试去修改的时候会报错,修改代码如下:
fn main() {
let x = 5;
println!("x is: {}", x);
x = 6; // 类似C语言的变量修改
println!("x is: {}", x);
}
[root@localhost branches]# vim src/main.rs
[root@localhost branches]# cargo check
Checking branches v0.1.0 (/root/code/branches)
error[E0384]: cannot assign twice to immutable variable `x`
--> src/main.rs:4:5
|
2 | let x = 5;
| -
| |
| first assignment to `x`
| help: consider making this binding mutable: `mut x`
3 | println!("x is: {}", x);
4 | x = 6;
| ^^^^^ cannot assign twice to immutable variable
For more information about this error, try `rustc --explain E0384`.
error: could not compile `branches` due to previous error
这个设计有点意思,可能是Rust以安全为主要设计目标吧,但是如果我们需要一个可变的变量该如何做呢? Rust提供了另外一个关键字“mut”,代码如下:
fn main() {
let mut x = 5; // 定义时添加关键字mut
println!("x is: {}", x);
x = 6;
println!("x is: {}", x);
}
此时再check一次就可以编译通过了。这里还有个问题,当变量不可变时那么与常量有什么区别呢?首先说明一下,在Rust语言中定义常量主要使用关键字const进行定义
const MAX_NUM = 10000;
Rust中常量的名称约定俗成采用全大写字母,单词之间采用下划线进行连接。事实上两者还是有些许差异的:
1、变量定义使用let,常量定义使用const;
2、变量默认是不可变的,添加mut关键字后可变;但是常量是永远不可变的;
3、常量可以在任意作用域中定义,甚至可以是全局;
说完变量,再浅聊一下Rust的数据类型,今天学习到的内容主要有两种数据类型子集:标量类型、复合类型。
标量类型是单个值类型的统称:整数、浮点数、布尔值以及字符
整数包括内容如下:
(注:图片内容摘自《Rust权威指南》)
在Rust中,浮点型包含两种类型:f32 和 f64,它们分别占用32位和64位空间。Rust默认会将浮点数类型推导为f64。布尔值与其他语言类似,包含了两个可能值:true和false,占据单个字节空间,可以使用bool表示一个布尔类型,最后一个标量类型就是字符类型char,字符类型使用单引号指定
let num = 5
let fl = 5.4
let f:bool = false
let ch:char = 'a'
复合类型包括两种:元组类型、数组
元组跟python中的tuple类似,元素类型可以不一样,但是定义后元素不可修改、不可删除,而数组跟C语言数组用法一致,此处不再展开。
今天就学习了这些内容,整理完成。