准备一个新项目
要创建一个新项目,进入第一章中创建的 projects 目录,使用 Cargo 新建一个项目,如下:
$ cd guessing_game
第一个命令,cargo new,它获取项目的名称(guessing_game)作为第一个参数。第二个命令进入到新创建的项目目录。
看看生成的 Cargo.toml 文件:
文件名: Cargo.toml
name = "guessing_game"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
正如第一章那样,cargo new 生成了一个 ”Hello, world!” 程序。查看 src∕main.rs 文件:文件名: src∕main.rs
println!("Hello, world!");
}
现在使用 cargo run 命令,一步完成 ”Hello, world!” 程序的编译和运行:
Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
Finished dev [unoptimized + debuginfo] target(s) in 1.50s
Running `target/debug/guessing_game`
Hello, world!
当你需要在项目中快速迭代时,run 命令就能派上用场,正如我们在这个游戏项目中做的,在下一次迭代之前快速测试每一次迭代。
重新打开 src∕main.rs 文件。我们将会在这个文件中编写全部的代码。
处理一次猜测
猜猜看程序的第一部分请求和处理用户输入,并检查输入是否符合预期的格式。首先,允许玩家输入猜测。在 src∕main.rs 中输入示例 2-1 中的代码。
文件名: src∕main.rs
fn main() {
println!("Guess the number!");
println!("Please input your guess.");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
println!("You guessed: {}", guess);
}
这些代码包含很多信息,我们一行一行地过一遍。为了获取用户输入并打印结果作为输出,我们需要将io输入∕输出库引入当前作用域。io 库来自于标准库,也被称为 std:
#
# fn main() {
# println!("Guess the number!");
#
# println!("Please input your guess.");
#
# let mut guess = String::new();
#
# io::stdin()
# .read_line(&mut guess)
# .expect("Failed to read line");
#
# println!("You guessed: {}", guess);
# }
默认情况下,Rust 将 prelude 模块中少量的类型引入到每个程序的作用域中。
如果你需要的类型不在 prelude 中,你必须使用 use 语句显式地将其引入作用域。std:: io 库提供很多有用的功能,包括接收用户输入的功能。
如第一章所提及,main 函数是程序的入口点:
#
fn main() {
# println!("Guess the number!");
#
# println!("Please input your guess.");
#
# let mut guess = String::new();
#
# io::stdin()
# .read_line(&mut guess)
# .expect("Failed to read line");
#
# println!("You guessed: {}", guess);
# }
fn 语法声明了一个新函数,小括号 () 表明没有参数,大括号 { 作为函数体的开始。
第一章也提及了 println! 是一个在屏幕上打印字符串的宏:
#
# fn main() {
println!("Guess the number!");
println!("Please input your guess.");
#
# let mut guess = String::new();
#
# io::stdin()
# .read_line(&mut guess)
# .expect("Failed to read line");
#
# println!("You guessed: {}", guess);
# }
这些代码仅仅打印提示,介绍游戏的内容然后请求用户输入。