- Cargo
- 源文件扩展名通常为rs,用rustc编译,但使用cargo更好
- cargo new —bin <名称> 创建一个应用程序
- 编译:cargo build [—release]
- 编译运行:cargo run
- 配置文件
- cargo.toml 工程配置
- cargo.lock 记录编译时各种依赖库的版本,保证编译可重现
语法
- 外部依赖
- 引入:extern crate <名称>
- 使用:use
::<类型名称>
- 变量
- let 定义变量,通常不指定类型,使用自动类型推导;如果要指定类型,在变量名后面加冒号和类型名称
- 默认为不可变的(immutable),可使用mut修饰表示可变(muttable)
- 强大的match```rust
match guess.cmp(&secret_number){
} ```Ordering::Less => println!("小了"),
Ordering::Greater => println!("大了"),
Ordering::Equal => {
println!("猜对了");
break;
}
- 外部依赖
源代码```rust
/ 引入外部依赖需要extern crate和use两个语句 / extern crate rand;
use std::io; use std::cmp::Ordering; use rand::Rng;
fn main() {
println!("----- 猜数游戏 -----");
// let定义变量,默认为不可变的(immutable)
let secret_number = rand::thread_rng().gen_range(1,101);
loop{
println!("输入猜测值: ");
// 用mut明确说明变量值可修改
let mut guess = String::new();
// io::stdin() 返回 Stdin 实例
// read_line() 函数读取一行
// &mut 表示引用可变的变量
// read_line() 的返回值为Result类型,是一个枚举,通常的值有OK和Err
// Result 类型的 expect() 函数在值为 Err 的时候 panic
// 导致程序退出
io::stdin().read_line(&mut guess).expect("读取行失败");
// 允许变量遮盖(shadown)
// String 类型的 trim() 方法去除头尾空格
// parse() 解析字符串到数,可返回多种类型,所以需要指定类型
// let mut guess: u32 = match guess.trim().parse().expect("请输入一个数")
let guess: u32 = match guess.trim().parse(){
Ok(num) => num,
Err(_) => continue,
};
println!("你的猜测: {}",guess);
// match的功能很强大,类似switch
match guess.cmp(&secret_number){
Ordering::Less => println!("小了"),
Ordering::Greater => println!("大了"),
Ordering::Equal => {
println!("猜对了");
break;
}
}
}
} ```