rust环境搭建
编译器的安装
前提是使用vpn,在ubuntu中执行以下命令
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
替换cargo源
在.cargo目录中创建config文件,内容如下:
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
cargo的使用
cargo new [project_name]
cargo build
cargo run
引用别的库的方法
在Cargo.toml文件中[dependencies]
这一项中添加自己需要的库
CommonProgrammingConcepts
variables
-
基本原则:
- 使用let创建一个变量
- 不能对一个immutable variable赋值两次
- 声明变量时,添加mut修饰,就可以多次赋值。
-
immutable variable与constants的区别
- 声明方式不同,immutable variable直接由let声明;constants由const关键字声明,必须要指明常量的类型
- constants不能是表达式或者是函数返回值
- let不能声明全局变量
-
shadowing(覆盖)
多次使用let,上次的值会被最新的值覆盖,这里就有个疑问了,既然要修改变量为什么不用mut修饰。- 原因是有些情况我们希望在对变量做了一些操作之后就不修改它的值了,就需要用到shadowing了。
- 使用shadowing的话我们可以修改变量的类型,类似于重新声明了一个新类型的变量,使用起来比mut方便
basic types
-
Scalar Types
- Integer Types
Length Signed Unsigned 8-bit i8 u8 16-bit i16 u16 32-bit i32 u32 64-bit i64 u64 128-bit i128 u128 arch isize usize -
Floating-Point Types
f32和f64,如果不声明,默认是f64类型
-
Numeric Operations
与其他语言类似
-
The Boolean Type
-
The Character Type
The Boolean Type和The Character Type与c语言类似
-
Compound Types
- The Tuple Type
fn main() { /* 声明方法,也可以缺省类型声明 */ // let tup = (500, 6.4, 1); let tup: (i32, f64, u8) = (500, 6.4, 1); /* 访问tuple内的元素 */ let five_hundred = x.0; let six_point_four = x.1; let one = x.2; }
- The Array Type
fn main() { /* 缺省声明 */ let a = [1, 2, 3, 4, 5]; /* 完整声明 */ let a: [i32; 5] = [1, 2, 3, 4, 5]; /* 特殊 */ //let a = [3, 3, 3, 3, 3];与下面的语句作用一样 let a = [3; 5]; let first = a[0]; let second = a[1]; }
functions
定义函数是由fn关键字开始
-
传参
与所有的静态类型语言类似,形参需要指定类型,实参与形参类型保持一致
函数体中包含的声明(Statements)和表达式(Expressions)
rust是一种基于表达式的语言。下面就介绍一下Statements和Expressions不同的地方:
- Statements没有返回值,Expression有返回值
- 加了分号应该就算Statements了
-
返回值
使用->指定函数的返回值类型
comments
使用双斜杠 //
control flow
-
if expressions
- if关键字后面跟的是一个expression
- if语句的花括号中可以是Statements也可以是Expressions
- 在let语句中使用if时,要注意保证花括号中的数据类型保持一致
-
loop
- loop语句相当于死循环,使用break跳出循环
- loop是可以有返回值的,跟在break后面就可以了
例子:
fn main() { let mut counter = 0; let result = loop { counter += 1; if counter == 10 { break counter * 2; } }; println!("The result is {}", result); }
-
while
fn main() { let a = [10, 20, 30, 40, 50]; let mut index = 0; while index < 5 { println!("the value is: {}", a[index]); index += 1; } }
-
for
fn main() { let a = [10, 20, 30, 40, 50]; for element in a.iter() { println!("the value is: {}", element); } }