HelloRust - 4、基本概念
🧑🚀跟着《Rust权威指南》学习Rust💪,跟Rust打个招呼吧Hello Rust!
🖐️😜
🧑✈️同步更新Github/skyline93
✔️一、安装Rust
✔️二、第一个Rust程序
✔️三、使用Cargo
🔞👉四、基本概念
四、基本概念
4.1、变量
4.1.1、不可变性
查看示例项目如下代码:
fn main() {
let x = 5; // 1
println!("The value of x is {}", x);
x = 6; // 2
println!("The value of x is {}", x);
}
分析:
- 变量使用关键字
let
定义; - 变量默认是不可变的,如上代码编译将报错,如下:
$ cargo check
Checking variables v0.1.0 (/workspace/hellorust/code/4/variables)
error[E0384]: cannot assign twice to immutable variable `x`
--> src/main.rs:5:5
|
2 | let x = 5;
| -
| |
| first assignment to `x`
| help: consider making this binding mutable: `mut x`
...
5 | x = 6;
| ^^^^^ cannot assign twice to immutable variable
For more information about this error, try `rustc --explain E0384`.
error: could not compile `variables` due to previous error
💌Tip: 变量被设计成不可变的原因有几个方面的原因:
- 有时候代码逻辑依赖一个不可变的值,一旦变量值发生变化,往往很难跟踪;尤其修改变量操作仅在某种特定条件下发生时;
- 当使用一些重型的数据结构,使用可变性修改一个实例可能比赋值和返回一个新的实例效率要高。为什么❓❓赋值和修改的底层是什么区别;
- 当使用较为轻量的数据结构时,通过创建新变量可能会使代码更加易于理解;
4.1.2、 可变性
上述示例代码修改如下,增加mut
关键字使变量具有可变性,即可通过编译:
fn main() {
let mut x = 5; // 变量前增加mut关键字使变量具有可变性
println!("The value of x is {}", x);
x = 6;
println!("The value of x is {}", x);
}
4.1.3、隐藏
如上述代码也可修改为如下,对不可变的变量x再次使用let
关键字定义,称作第一个变量x被第二个变量x隐藏了,如下:
fn main() {
let x = 5;
println!("The value of x is {}", x);
let x = 6; // 将x隐藏,x的值为6
println!("The value of x is {}", x);
}
这样对变量执行完一系列操作后,变量x还保持自身的不可变性。但是要注意,重复使用let
关键字声明变量虽然变量名不变,得到的确是一个全新的变量,而且通过隐藏,可以改变该变量的类型,如下:
let x = "abc"; // 变量x是字符串类型
let x = 1; // 变量x变成了数值
而具有可变性的变量是不允许改变数据类型的,如下操作编译将失败:
let mut x = "abc"; // 变量x是字符串类型
x = 1; // 变量x变成了数值
报错如下:
$ cargo run
Compiling variables v0.1.0 (/workspace/hellorust/code/4/variables)
error[E0308]: mismatched types
--> src/main.rs:27:9
|
26 | let mut x = "abc"; // 变量x是字符串类型
| ----- expected due to this value
27 | x = 1; // 变量x变成了数值
| ^ expected `&str`, found integer
For more information about this error, try `rustc --explain E0308`.
error: could not compile `variables` due to previous error
4.2、常量
使用const
关键字定义一个常量
const MAX_POINTS: u32 = 100_000
🌈代码风格:
- 常量通常使用下划线分隔的全大写字母命名,如果是数值类型,数值使用下划线提高可读性;
💌Tip: 常量和不可变变量虽然都无法被其他代码修改,但它们还是存在一些区别:
- 常量不仅默认不可变,而且总是不可变;
- 常量的定义使用
const
关键字定义,而且必须显示指定其数据类型; - 常量可以声明在任何作用域中,包括全局作用域;
- 常量只能在常量表达式中使用,无法将运行时的值绑定到常量上。
本文来自博客园,作者:GreeneGe,转载请注明原文链接:https://www.cnblogs.com/greene/p/16463007.html