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()

源碼下載

下載地址

參考

發佈了59 篇原創文章 · 獲贊 20 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章