The Rust Programming Language第二章的猜数游戏,自己也写了下。
主要是调库函数,看标准库模块的话,在https://doc.rust-lang.org/std中搜索,看第三方rate的话,在https://docs.rs/中搜索,以及第三方rate如果有book链接,优先看这个。
//cargo.toml
[package]
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]
rand="0.8.5"
//main.rs
use rand::prelude::*;
use std::{cmp::Ordering, io::stdin};
fn main() -> () {
println!("Guess game!");
let mut rng = thread_rng();
let random_value = rng.gen_range(1..1000);
loop {
let mut input = String::new();
println!("plz guess a number:");
stdin().read_line(&mut input).expect("read input error.");
let guess_num: i32 = match input.trim().parse() {
Ok(value) => value,
Err(err) => {
println!("bad input: {}, try again.", err);
continue;
}
};
match guess_num.cmp(&random_value) {
Ordering::Less => println!("Less."),
Ordering::Greater => println!("Greater"),
Ordering::Equal => {
println!("win");
break;
}
}
}
}
rust的观感和别的强类型语言看起来还是有些不一样的,主要是match匹配、panic机制,还有错误处理。
像go的话写起来就是这样的(代码来自chingli.com/coding/go-rust/01-intro/):
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
fmt.Println("Guess the number!")
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(101)
Loop:
for {
fmt.Println("Please input your guess.")
guess := -1
_, err := fmt.Scanln(&guess)
if err != nil {
fmt.Println("Failed to read line:", err)
continue
}
fmt.Printf("You win: %v\n", guess)
switch {
case guess < secretNumber:
fmt.Println("Too small!")
case guess > secretNumber:
fmt.Println("Too big!")
case guess == secretNumber:
fmt.Println("You win!")
break Loop
}
}
}