Rust:变量 常量 数据类型

By kcersing , 6 八月, 2021

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];
}





标签