四.入門猜字遊戲
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基本的變數宣告,函式呼叫,錯誤處理有初步認知。