学习记录下,包含了letmatch方法关联函数引用外部 crate 等知识!

整体体验:

  1. 异常处理与Java和Golang比较感觉更加灵活方便;
  2. 不用重复定义guessStr等名称的变量,可以直接重复赋值,也挺方便的。rust管这个叫变量遮蔽, 遮蔽(shadow)
  3. 可以使用箭头函数 =>
  4. 不用的变量可以使用 _ 忽略,和Golang一样;
  5. 目前不爽的就是 println 等方法还要使用 println!("xxx") 这样去使用。虽然知道 ! 意味着调用的是宏而不是普通的函数。

代码如下:

use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
    println!("开始猜数游戏");

    let secret_number = rand::thread_rng().gen_range(1..101);

    // println!("系统选中的数字: {}", secret_number);

    loop {
        print!("请输入猜的数字.");

        let mut guess = String::new();

        io::stdin().read_line(&mut guess).expect("错误的读取");

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => {
                println!("请输入正确的数字.");
                continue;
            }
        };

        println!("你猜的数字: {}", guess);

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("小了"),
            Ordering::Greater => println!("大了"),
            Ordering::Equal => {
                println!("猜对了!");
                break;
            }
        }
    }
}

运行结果:

> cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 1.80s
     Running `target\debug\guessing_game.exe`
开始猜数游戏
请输入猜的数字.
22
你猜的数字: 22
大了
请输入猜的数字.
10
你猜的数字: 10
大了
请输入猜的数字.
5
你猜的数字: 5
小了
请输入猜的数字.
6
你猜的数字: 6
小了
请输入猜的数字.
7
你猜的数字: 7
小了
请输入猜的数字.
8
你猜的数字: 8
猜对了!

标签: none

添加新评论