Rust小試牛刀之猜猜看遊戲

2021-09-27 06:55:37 字數 3541 閱讀 5266

time: 20190919

直接進入rust實踐階段,涉及到如下幾個概念:

cargo new guessing_game

cd guessing_game

1.輸入資料邏輯

首先,既然是猜測遊戲,那一定先有資料輸入進來。

然後要處理、檢查輸入。

因此第一步,我們先處理程式輸入問題。

use std::io;

fn main()

", guess)

;}

這簡短的**片段中包含的資訊量還是蠻大的。

首先,處理輸入,需要引入乙個能夠處理輸入輸出的庫io,這是標準包中的庫,因此字首是std

預設情況下,rust只會引入少量的資料型別,如果想引入新的型別,工具,需要用use std::io;這種語法。

程式的入口點

fn main() {}函式是程式的入口函式。

fn用於宣告乙個函式。

println!是乙個巨集,用於列印資料到螢幕。

用變數儲存資料

let mut guess = string::

new(

);

let用於宣告乙個變數,這種let foo = bar;是將變數foo繫結到bar這個變數上。

非常值得注意的是,rust中宣告的變數,預設是不可變的。如果想定義乙個可變的變數,則用mut顯式宣告。

let foo =5;

// 不可變

let mut bar =5;

// 可變

string::new();

這裡涉及到兩個概念:

其中關聯函式,在其他語言中也稱作靜態函式,這麼一看就很好理解了。

這裡的new函式會建立乙個空的字串例項。

現在正式進入輸入模組。

輸入資料

要儲存輸入資料的變數已經準備完畢,就等著外部輸入了。

io::stdin()會返回乙個std::io::stdin例項,stdin型別用於表示乙個控制代碼,能夠處理終端的輸入。

然後呼叫stdin型別上的函式read_line,用於讀取標準輸入控制代碼上的使用者輸入的內容,讀取的結果存在guess變數上。

read_line的職能就是讀取使用者的任何輸入並且將其存放到字串中,因此它接收乙個字串型別變數當做輸入引數。且需注意,這個字串型別變數需要是可變的,因為該方法會修改字串的內容(新增使用者的輸入內容)。

主要是這個語法有點奇怪:io::stdin().read_line(&mut guess),為何在guess變數前新增&mut修飾呢?

這和c++中的引用引數是乙個道理。

表示直接修改我們定義的變數guess,而不是複製資料,生成新的變數,加mut表示變數可變。

後面會再詳細闡述rust中的引用變數。

處理可能會遇到的失敗問題,result型別

read_line函式會幹兩件事情:

對於result而言,有兩個變數值:

result型別上有乙個函式可以呼叫.expect,如果result結果是失敗,則返回.expect()函式中提供的資訊。如果成功,則返回讀取的值。

嗯,很合理。

列印數值,使用佔位符

println!("you guessed: {}", guess);

不止可以使用乙個佔位符,可用多個,按照順序即可:

#!

[allow

(unused_variables)

]fn main()

and y = {}"

, x, y)

;}

2.生成乙個隨機數字邏輯

生成乙個讓使用者猜測的數值,用隨機數生成器是最好的方式,人工指定,則遊戲缺乏可玩性。

同時為了降低遊戲的難度,我們限定生成的數字在1~100之間。

但是,問題是,在rust標準庫中,並不包含生成隨機數的功能。但提供了乙個可以生成隨機數的包,rand crate

修改cargo包資料來源

參考:在~/.cargo目錄下新建config檔案,或者有這個檔案的話修改內容為:

[source.crates-io]

replace-

with

='ustc'

[source.ustc]

registry =

"git:"

即可使用國內源。

使用 rand crate

切換好映象源之後,就可以使用cargo build構建,會首先更新包索引,然後根據依賴項,安裝依賴。依賴本身的依賴也會被獲取。

cargo.lock

此檔案會記錄第一次執行cargo build時的依賴情況。

cargo update用於更新包

這個命令會忽略cargo.lock,按照cargo.toml中的指定的版本更新包。

完整的猜謎遊戲**

use std:

:io;

use rand:

:rng;

use std:

:cmp:

:ordering;

fn main()

", secret_number);

loop

; println!

("你輸入的資料是:{}"

, guess)

;// 模式匹配器

match guess.

cmp(

&secret_number)}}

}

2019.10 update:

end.

Rust之Cargo 2 猜猜看

本文在緊接上次rust之cargo 1 猜猜看,改進和新增部分 繼續rust學習之旅。這裡繼續沿用上次工程rust demo。本次想實現隨機猜數字的功能。dependencies rand 0.5.5 cargo.tom檔案 cargo build編譯中 如果這裡編譯很慢的話,需要新增國內的rust...

小試牛刀之webpack dev server

模組熱替換 用express搭建過乙個小型的伺服器,用過監聽模式來解決手動npm run build的麻煩,這次使用webpack dev server來搭建乙個伺服器,且一併解決 手動編譯 手動重新整理瀏覽器 的麻煩。目錄 詳細 root div body html import from mat...

Puppeteer學習之小試牛刀

最近有了寫文章的動力了,一方面是受到了很多前輩們的啟示,另一方面也是為了記錄下來更好地學以致用。閒言少敘,先說說puppeteer是什麼。puppeteer是乙個node庫,提供了一些用來操作chrome的api,官網上介紹了一些實用的例子,可以先睹為快,第一步 環境配置 2.安裝完nodejs後,...