第一章 基础知识
将探讨函数、变量和最基本的类型等基本知识。
变量
变量使用let关键字来声明。
在赋值时,Rust能够在99%的情况下推断变量类型。如果不能,也可以将类型添加到变量声明中。
注意 如果多次分配相同的变量名的方式,这被称为变量隐藏。可以更改变量类型以实现对该变量名的后续使用。
变量名总是遵循蛇形命名法
let x = 13; println!("{}", x); let x: f64 = 3.14159; println!("{}",x); let x; x = 0; println!("{}", x);
修改变量
Rust非常关心那些变量时可修改的,值分为两种类型:
-
可变的 - 编译器允许对变量进行读取和写入
-
不可变的- 编译器只允许对变量进行读取。
可变值用mut 关键字表示
1 let mut x = 42; 2 println!("{}", x); 3 x = 13; 4 println!("{}", x);
基本类型
Rust有多种常见的类型:
-
布尔类型-bool 表示true或false
-
无符号整型- u8, u32, u64, u128表示正整数
-
有符号整型- i8, i32, i64, i128表示正负整数
-
指针大小的整数- usize, isize 表示内存中内容的索引和大小
-
浮点数- f32 f64
-
元组 tuple - (value, value, ...) 用于在栈上传递固定序列的值
-
数组- 在编译时已知的具有固定长度的相同元素的集合
-
切片 slice 在运行时已知长度的相同元素的集合
-
Str (string slice) - 在运行时已知长度的文本
可以通过将类型附加到数字的末尾来明确指定数字类型(13u32, 2u8)
1 let x = 12; 2 let a = 12u8; 3 let b = 4.3; 4 let c = 4.3f32; 5 let bv = true; 6 let t = (13, false); 7 let sentence = "hello world!"; 8 println!("{} {} {} {} {} {} {} {}", 9 x, a, b, c, bv, t.0, t.1, sentence 10 );
基本类型转换
as 关键字,Rust使数字类型转换非常容易
let a = 13u8; let b = 7u32; let c = a as u32 + b; println!("{}", c); let t = true; println!("{}", t as u8);
常量
常量允许我们高效地指定一个在代码中会被多次使用的公共值。不会象变量一样在使用的时候会被复制值,常量会在编译期间直接用它们的值来替换文本标识符
不同于变量,常量必须始终具有显式类型。
常量名总是遵循全大写蛇形命名法。
1 const PI: f32 = 3.14158;
数组
数组是所有相同类型数据元素的固定长度集合。
一个数组的数据类型是[T; N], 其中T是元素的类型,N是编译时已知的固定长度。
可以使用 [x]运算符检索单个元素,其中x是所需元素的usize索引。
1 let nums: [i32; 3] = [1, 2, 3]; 2 println!("{:?}", nums); 3 println!("{}", nums[1]);
函数
函数有0个或者多个参数。
函数名总是遵循蛇形命名法。
1 fn add(x: i32, y: i32) -> i32 { 2 x + y 3 }
多个返回值
函数可以通过元组来返回多个值。
元组元素可以通过它们的索引来获取。
1 fn swap(x: i23, y: i32) -> (i32, i32) { 2 (y, x) 3 } 4 5 let result = swap(123, 321); 6 println!("{} {}"m result.0, result.1);