1. 程式人生 > 實用技巧 >四.入門猜字遊戲

四.入門猜字遊戲

use std::io;
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);
}
println!("Guess the number!");

println!列印資訊巨集

let mut guess = String::new();

mut可變變數,預設不帶mut,不可修改變數
Stirng::new()類似C++的靜態函式呼叫

io::stdin().read_line(&mut guess)
      .expect("Failed to read line");

io::stdin()返回類似c++的cin
read_line類似<<函式
expect為異常處理

呼叫io::stdin需要先引入use std::io包;
::new 那一行的 :: 語法表明 new 是 String 型別的一個 關聯函式(associated
function)。關聯函式是針對型別實現的,在這個例子中是 String ,而不是 String 的某個
特定例項。一些語言中把它稱為 靜態方法(static method)。

read_line 的工作是,無論使用者在標準輸入中鍵入什麼內容,都將其存入一個字串中,因
此它需要字串作為引數。這個字串引數應該是可變的,以便 read_line 將使用者輸入附加
上去。

& 表示這個引數是一個 引用(reference),

.expect("Failed to read line");
實際是昂read_line函式返回的io::Result物件的子函式,用於在出錯的的時候將語句輸出到stderr

整個還是像c++的函式呼叫返回一個物件,並通過物件的.語法繼續呼叫這個返回物件的成員函式

use std::io;
use std::cmp::Ordering;
use rand::Rng;
fn main() {
      // ---snip---
      println!("You guessed: {}", guess);
      match guess.cmp(&secret_number) {
          Ordering::Less => println!("Too small!"),
          Ordering::Greater => println!("Too big!"),
          Ordering::Equal => println!("You win!"),
      }
}

match語法可以初步理解為c++的switch散彈

guess是String型別,有cmp成員函式,切其返回一個列舉型別,然後在後面的{}中進行匹配。

再來看看錯誤處理

let guess: u32 = match guess.trim().parse() {
      Ok(num) => num,
      Err(_) => continue,
};

這是一個賦值語句,只是使用了額外的表示式進行求值。
guess.trim().parse()返回列舉型別,如果parse執行成功,則將返回值作為OK的引數num帶出,即成功走OK分支返回num值,並將num值繫結到guess變數,失敗走Err分支執行continue繼續執行

以上只是初步瞭解Rust的語法,我的目的是快速閱讀rust程式設計手冊,然後能後快速看懂Rust程式碼,熟悉quiche的庫。
故而例項細節以及更基礎的語法暫時不管。後面章節在看。
以上結合c++對rust基本的變數宣告,函式呼叫,錯誤處理有初步認知。