rust guessing game

Rust Guessing Game

简介

rust官方示例,猜猜看游戏 guessing_game 的小程序。从中我们可以感性认识到:

  1. extern crates 外部包装箱
  2. use crates 标准包装箱 和 包装箱
  3. fn func(),.method() 函数,方法,关联函数
  4. let,mut,:u32 等用于绑定的关键字
  5. loop 循环
  6. enum 枚举
  7. match 条件判断
  8. expect() 异常处理
  9. {} 在println中使用的占位符
  10. 以及一些有趣的 method 方法和关联函数
  • 包装箱crates 类似其他语言中的 库library 或者 包package
  • 绑定bindings 类似其他语言中的 变量variable

阅读源码之前

如果你未了解如何使用Cargo构建和运行你的程序,或者不知道如何依赖外部包装箱。
请参阅下面的文章:rust cargo使用

源码

做了些注释便于阅读,如有不当之处,请耐心指出,谢谢!

extern crate rand;      // 类似于use rand; (需在Cargo.toml中添加此外部依赖) 

use std::io;            // 使用std库的io库, 类似于namespace
use std::cmp::Ordering;
use rand::Rng;          // rand的位置 称为 特性traits域


fn main()               // 输入是空元组
{
    println!("Guess the number!");

    /* gen_range() 包含下限但不包含上限 */
    let secret_number = rand::thread_rng().gen_range(1, 101);
//  println!("The secret number is: {}", secret_number);


    loop 
    {
        println!("Please input your number:");
        /*
        let     创建新'绑定'                         '绑定'在其他语言中称为'变量 variable'
                '绑定'默认是不可变的'immutable'      在c中称为'const'的
        mut     让'绑定'可变。'mutable'
        ----
        let foo = bar;      // immutable
        let mut foo = bar;  // mutable
        */
        /*
        String  字符串type,由std库提供  String是可增长的,UTF-8文本
        ::      是type的“关联函数”       即::new()和String关联,而非String的实例.
                                         一些语言管这叫一个“静态方法”
                                        (而 . 是实例的方法)
        new()   函数,创建一个空的type。 很多其他type上都能找到 new() 函数
        */
        let mut guess = String::new();
        /*
        io::stdin() 如果文件开头不写 use std::io, 
                    则这里需要写std::io::stdin(),
        stdin()     返回一个指向终端标准输入的句柄
        read_line() stdin()的方法,一个type的特定实例(这里的实例是stdin())上可用
                    ( :: 是类型的关联函数)
        &mut guess  &为引用,引用默认是不可变的'immutable'。
                    而read_line()只接收&mut String类型
        .expect("Failed to read line");
                    read_line()的返回值 io::Result,有个expect()的方法
        */
        io::stdin().read_line(&mut guess).expect("Fail to readline");
        /*
        let guess: u32  Rust 允许我们用新值 遮盖shadow 之前的变量
                        Shadowing 让我们重用 guess 名字,而不是强迫我们想出两个独特名字
        guess.trim().parse()
        trim()          method, 会去掉字符串开头和结尾的任何空格
        parse()         method, 将字符串解析为'一些类型'的数字
                        而这个 一些类型 由之前 let guess: u32,而被认为是u32类型
        parse()         返回值有Ok和Err两种enum
        */
    //  let guess: u32 = guess.trim().parse().expect("Please type a number!");
        let guess: u32 = 
        match guess.trim().parse()
        {
            Ok(num) => num,
            Err(_)  => continue,
        };

        /*
        {}          占位符
        */
        println!("your guessd: {}", guess);



        /*
        cmp() 可以在任何能被比较的值上调用,并且它获取你想要比较的值的引用
        cmp() 返回一个 Ordering 类型
        Ordering 是一个 枚举enum,类似于:
        enum Ordering
        {
            Less,
            Greater,
            Equal,
        };
        用 :: 来表明一个特定 enum 变量的命名空间
        */
        match guess.cmp(&secret_number)
        {
            Ordering::Less      =>  println!("Too small!"),
            Ordering::Greater   =>  println!("Too big!"),
            Ordering::Equal     => {println!("You win!"); break;}

        }//match

    }// loop

}//end of main()

源码下载

下载地址

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值