Rust
Rust
安装Rust
curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh
设置环境变量
export PATH=$PATH:$HOME/.cargo/bin
用rustup管理工具链
rustup target list rustup target add x86_64-pc-windows-gnu rustup target add x86_64-apple-darwin
在Windows中使用gnu工具链
rustup set default-host x86_64-pc-windows-gnu 查看C:\Users\zhangzf.rustup\toolchains\stable-x86_64-pc-windows-gnu\lib\rustlib\x86_64-pc-windows-gnu\bin中gcc的版本 下载mingw-w64对应的版本,并设置环境变量
cargo
cargo update cargo clean cargo build
数据类型
- 标量类型 (scalar)
- 复合类型 (compound)
标量类型
- 整型
- 浮点型
- 布尔类型
- 字符类型
整型
- i8 u8
- i16 u16
- i32 u32
- i64 u64
- i128 u128
- isize usize
浮点型
- f32
- f64
布尔类型
- bool (true, false)
字符类型
- char
复合类型
- 元组
- 数组
元组 元组是一个将多个其他类型的值组合进一个复合类型的主要方式。元组长度固定:一旦声明,其长度不会增大或缩小。 我们使用包含在圆括号中的逗号分隔的值列表来创建一个元组。元组中的每一个位置都有一个类型,而且这些不同值的类型也不必是相同的
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!("x: {}", x);
}
除了使用模式匹配解构外,也可以使用点号(.)后跟值的索引来直接访问它们
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;
}
数组 与元组不同,数组中的每个元素的类型必须相同。Rust 中的数组与一些其他语言中的数组不同,因为 Rust 中的数组是固定长度的:一旦声明,它们的长度不能增长或缩小。 Rust 中,数组中的值位于中括号内的逗号分隔的列表中:
fn main() {
let a = [1, 2, 3, 4, 5];
}
可以像这样编写数组的类型:在方括号中包含每个元素的类型,后跟分号,再后跟数组元素的数量。
#![allow(unused)]
fn main() {
let a: [i32; 5] = [1, 2, 3, 4, 5];
}
以这种方式编写数组的类型看起来类似于初始化数组的另一种语法:如果要为每个元素创建包含相同值的数组,可以指定初始值,后跟分号,然后在方括号中指定数组的长度
let a = [3; 5]
变量名为 a 的数组将包含 5 个元素,这些元素的值最初都将被设置为 3
数组是一整块分配在栈上的内存。可以使用索引来访问数组的元素
fn main() {
let a = [1, 2, 3, 4, 5];
let first = a[0];
let second = a[1];
}
函数 函数遍布于 Rust 代码中。你已经见过语言中最重要的函数之一:main 函数,它是很多程序的入口点。你也见过 fn 关键字,它用来声明新函数。 Rust 代码中的函数和变量名使用 snake case 规范风格。在 snake case 中,所有字母都是小写并使用下划线分隔单词。
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Another function.");
}
函数参数 函数也可以被定义为拥有 参数(parameters),参数是特殊变量,是函数签名的一部分。当函数拥有参数(形参)时,可以为这些参数提供具体的值(实参)
fn main() {
another_function(5);
}
fn another_function(x: i32) {
println!("The value of x is: {}", x);
}
在函数签名中,必须 声明每个参数的类型。这是 Rust 设计中一个经过慎重考虑的决定:要求在函数定义中提供类型注解,意味着编译器不需要你在代码的其他地方注明类型来指出你的意图。
包含语句和表达式的函数体 函数体由一系列的语句和一个可选的结尾表达式构成。 因为 Rust 是一门基于表达式(expression-based)的语言,这是一个需要理解的(不同于其他语言)重要区别 语句(Statements)是执行一些操作但不返回值的指令。表达式(Expressions)计算并产生一个值
具有返回值的函数 函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(->)后声明它的类型 在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用 return 关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式。
fn five() -> 32 {
5
}
fn main() {
let x = five();
println!("The value of x is: {}", x);
}
控制流 if else if else
loop while for