Rust 变量
Rust中变量默认是不可改变的,说是做过统计开发中大部分变量都是使用原始值变动较少,这个不用太纠结~。
当然变量嘛,也是可以设置成可变的~再重复一边 在 Rust 中变量默认是不可改变的。
fn main() {
let x = 5;
println!("The value of x is: {}", x);
x = 6;
println!("The value of x is: {}", x);
}
是跟着<Rust 程序设计语言>这本书走的~~~
不用想,肯定会报错的,因为在在 Rust 中变量默认是不可改变的。
当然想改变变量值还是有办法,在变量前加关键字 mut 就可以了。
fn main() {
let mut x = 5;
println!("The value of x is: {}", x);
x = 6;
println!("The value of x is: {}", x);
}
Rust 常量
在其他语言中 不可变的往往是常量,Rust中常量肯定也是不能变,不能像变量一样使用mut ,常量不光默认不能变,它总是不能变。常量与变量还是有一些区别的。
声明常量使用 const 关键字而不是 let,并且 必须 注明值的类型。
常量可以在任何作用域中声明,包括全局作用域,这在一个值需要被很多部分的代码用到时很有用。
最后一个区别是,常量只能被设置为常量表达式,而不能是函数调用的结果,或任何其他只能在运行时计算出的值。
这是一个声明常量的例子,它的名称是 MAX_POINTS,值是 100,000。(Rust 常量的命名规范是使用下划线分隔的大写字母单词,并且可以在数字字面值中插入下划线来提升可读性):
const MAX_POINTS: u32 = 100_000;
在声明它的作用域之中,常量在整个程序生命周期中都有效!在rust中还有一个概念是所有权~
Rust 变量 隐藏
fn main() {
let x = 5;
let x = x + 1;
let x = x * 2;
println!("The value of x is: {}", x);
}
看代码 。和mut改变变量值来说,这里的变量x可不是重新赋值啊,let 是创建了一个新变量,可以改变值的类型,复用这个名字。
Rust 数据类型
Rust 是 静态类型(statically typed)语言,也就是说在编译时就必须知道所有变量的类型。
标量(scalar)类型代表一个单独的值。Rust 有四种基本的标量类型:整型、浮点型、布尔类型和字符类型。你可能在其他语言中见过它们。让我们深入了解它们在 Rust 中是如何工作的。
整型
一个没有小数部分的数字。额,这....都知道把???
Rust 中的整型
长度有符号无符号8-biti8u816-biti16u1632-biti32u3264-biti64u64128-biti128u128archisizeusize
浮点型
Rust 也有两个原生的 浮点数(floating-point numbers)类型,它们是带小数点的数字。Rust 的浮点数类型是 f32 和 f64,分别占 32 位和 64 位。默认类型是 f64,因为在现代 CPU 中,它与 f32 速度几乎一样,不过精度更高。
fn main() {
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
数值运算
fn main() {
// 加法
let sum = 5 + 10;
// 减法
let difference = 95.5 - 4.3;
// 乘法
let product = 4 * 30;
// 除法
let quotient = 56.7 / 32.2;
// 取余
let remainder = 43 % 5;}
布尔型
fn main() {
let t = true;
let f: bool = false; // 显式指定类型注解}
字符类型
fn main() {
let c = 'z';
let z = 'ℤ';
let heart_eyed_cat = '😻';
}
复合类型
复合类型(Compound types)可以将多个值组合成一个类型。Rust 有两个原生的复合类型:元组(tuple)和数组(array)。
组类型
元组是一个将多个其他类型的值组合进一个复合类型的主要方式。元组长度固定:一旦声明,其长度不会增大或缩小。
fn main() {
let tup: (i32, f64, u8) = (500, 6.4, 1);
}
tup 变量绑定到整个元组上,因为元组是一个单独的复合元素。为了从元组中获取单个值,可以使用模式匹配(pattern matching)来解构(destructure)元组值,像这样:
fn main() {
let tup = (500, 6.4, 1);
let (x, y, z) = tup;
println!("The value of y is: {}", y);
}
程序首先创建了一个元组并绑定到 tup 变量上。接着使用了 let 和一个模式将 tup 分成了三个不同的变量,x、y 和 z。这叫做 解构(destructuring),因为它将一个元组拆成了三个部分。最后,程序打印出了 y 的值,也就是 6.4。
除了使用模式匹配解构外,也可以使用点号(.)后跟值的索引来直接访问它们。例如:
fn main() {
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
}
数组类型
fn main() {
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 a = [3; 5];//变量名为 a 的数组将包含 5 个元素,这些元素的值最初都将被设置为 3。这种写法与
let a = [3, 3, 3, 3, 3]; 效果相同,但更简洁。
}
访问数组元素
fn main() {
let a = [1, 2, 3, 4, 5];
let first = a[0];
let second = a[1];
}