国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

rust入門基礎(chǔ)案例:猜數(shù)字游戲

這篇具有很好參考價(jià)值的文章主要介紹了rust入門基礎(chǔ)案例:猜數(shù)字游戲。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

案例出處是《Rust權(quán)威指南》,書中有更加詳細(xì)的解釋。從這個(gè)例子中,我們可以了解到 rust 的兩個(gè)操作:

  1. 如何從控制臺讀取用戶輸入
  2. rust 如何生成隨機(jī)數(shù)

代碼格式化

編譯器可在保存時(shí)對代碼做格式化處理,底層調(diào)用 rustfmt 來實(shí)現(xiàn),代碼內(nèi)容基本和書中內(nèi)容一致。代碼中使用 use 語句顯示的導(dǎo)入了標(biāo)準(zhǔn)庫 std 中的 iocmp 包,因?yàn)?rand包并不在標(biāo)準(zhǔn)庫中,所以,我們在 dependencies 聲明中引入 rand 包。

use rand::Rng;
use std::{cmp::Ordering, io};

fn main() {
    let secret_number = rand::thread_rng().gen_range(1, 101);

    loop {
        let mut guess = String::new();
        io::stdin()
            .read_line(&mut guess)
            .expect("failed to read line");

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(err) => {
                println!("parse error: {err}");
                continue;
            }
        };

        match guess.cmp(&secret_number) {
            Ordering::Equal => {
                println!("success");
                break;
            }
            Ordering::Greater => println!("too big"),
            Ordering::Less => println!("too small"),
        }
    }
}

從控制臺讀取輸入

io::stdin() 中的::語法聲明stdin是io類型的一個(gè)關(guān)聯(lián)函數(shù),rust 會針對類型本身來定義函數(shù),而不是針對某個(gè)特定實(shí)例,同樣還有 String::new() 方法調(diào)用。

read_line 將控制臺輸入的內(nèi)容存儲到傳入的參數(shù)中,同時(shí)返回 io::Result 類型值。這個(gè)類型屬于枚舉類型,rust 主要用來做錯(cuò)誤處理。

生成隨機(jī)數(shù)

針對 dependencies 中 rand 包的聲明,rust 按照標(biāo)準(zhǔn)的語義化版本來處理版本號。版本聲明中的 0.3.14實(shí)際上是^0.3.14的一個(gè)簡寫,它表示“任何與0.3.14版本公共API相兼容的版本”

[dependencies]
rand = "0.3.14"

程序最終使用的 rand 版本會記錄在 Cargo.lock 文件中,通過 Cargo.lock 中詳細(xì)的版本依賴信息,才保證了我們?nèi)魏螘r(shí)候編譯的結(jié)果都是相同的。除第一次構(gòu)建程序外,再次構(gòu)建程序時(shí),Cargo 會優(yōu)先檢查 Cargo.lock,假如文件中存在已經(jīng)指明具體版本的依賴庫,那么它就會跳過計(jì)算版本號的過程,并直接使用文件中指明的版本。這使得我們擁有了一個(gè)自動化的、可重現(xiàn)的構(gòu)建系統(tǒng)。

下面記錄了 Cargo.lock 中記錄了項(xiàng)目依賴的 rand 包詳細(xì)信息:

rust入門基礎(chǔ)案例:猜數(shù)字游戲,rust 編程開發(fā),rust,開發(fā)語言

當(dāng)你確實(shí)想要升級某個(gè)依賴包時(shí),Cargo提供了一個(gè)專用命令:update,它會強(qiáng)制Cargo忽略Cargo.lock 文件,并重新計(jì)算出所有依賴包中符合Cargo.toml 聲明的最新版本。假如命令運(yùn)行成功,Cargo就會將更新后的版本號寫入Cargo.lock文件,并覆蓋之前的內(nèi)容。

cargo doc

這里推薦另一個(gè)指令 : cargo doc --open,前面的例子中有講到 rustup doc,cargo doc 會本地構(gòu)建一份項(xiàng)目依賴的文檔,并自動在瀏覽器中打開供你查看。

對于自動生成的依賴文檔,我們期待里面直接包含了 rand、io、cmp 的 API 說明,至少包含 dependencies 中明確聲明的依賴包。但生成的文檔中,可能只包含了 guess 這一個(gè)主包的文檔,壓根不符合我們的預(yù)期。

我們通過它的屬性列表來一一試探一下:

rust入門基礎(chǔ)案例:猜數(shù)字游戲,rust 編程開發(fā),rust,開發(fā)語言

  • cargo doc 生成的文檔依賴 manifest 文件中聲明的 workspace,manifest 指代項(xiàng)目的 Cargo.toml 文件,當(dāng)前項(xiàng)目的 manifest 中并沒有聲明 workspace 區(qū)塊。 查看 workspace 的使用文檔,主要是定義項(xiàng)目內(nèi)存在多個(gè)自定義包的情況,rand、cmp 不再這個(gè)范圍內(nèi),所以屬性 ----workspace 沒有什么效果。
  • cargo doc --package 'rand@0.3.23' --open 通過屬性 package 明確指定了文檔中的包名,瀏覽器正常的輸出了 rand 包的 API。

rust入門基礎(chǔ)案例:猜數(shù)字游戲,rust 編程開發(fā),rust,開發(fā)語言

方法 gen_range 生成的隨機(jī)數(shù)包含下限不包含上限,所以代碼中指定了1和101來獲取1到100間的隨機(jī)整數(shù)。

正常生成偽隨機(jī)數(shù)都需要初始化 seed,如果不做初始化,每次生成的隨機(jī)數(shù)都是相同的。thread_rng 方法內(nèi)部把 seed 的封裝了。如果使用相同的對象會生成相同的隨機(jī)數(shù)嗎?下面的代碼最終生成的 3 個(gè)變量是不相同的。

 let thread_rng = rand::thread_rng();
 let secret_number = thread_rng.clone().gen_range(1, 101);
 let secret_number_1 = thread_rng.clone().gen_range(1, 101);
 let secret_number_2 = thread_rng.clone().gen_range(1, 101);
 println!("{}-{}-{}", secret_number, secret_number_1, secret_number_2);

類型轉(zhuǎn)換

代碼中將字符串類型轉(zhuǎn)換為 u32 類型,這種字符串類型轉(zhuǎn)換的方式直接通過類型聲明來實(shí)現(xiàn)。而且,guess 變量也是重新聲明的 u32 類型,隱藏了之前字符串類型的變量。

let guess: u32 = match guess.trim().parse()

下面給變量 x 重新賦值,rust 編譯會報(bào)錯(cuò):cannot mutate immutable variable,不可以對不可變量進(jìn)行修改。側(cè)面說明,x 屬于不可變量。

fn main() {
    let x: i32 = 5;
    x = 6;
}

下面通過 let 重新聲明變量的方式模擬實(shí)現(xiàn)了重新賦值,但實(shí)際上,第一個(gè)變量只是被第二個(gè)變量掩藏了。這個(gè)過程中,let 其實(shí)是創(chuàng)建了新的變量,所以,我們可以在復(fù)用變量名稱的同時(shí),修改它的類型。文章來源地址http://www.zghlxwxcb.cn/news/detail-742495.html

fn main() {
    let x: i32 = 5;
    let x: u32 = 6;
}

總結(jié)

到了這里,關(guān)于rust入門基礎(chǔ)案例:猜數(shù)字游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Rust編程語言入門之智能指針

    指針:一個(gè)變量在內(nèi)存中包含的是一個(gè)地址(指向其它數(shù)據(jù)) Rust 中最常見的指針就是”引用“ 引用: 使用 借用它指向的值 沒有其余開銷 最常見的指針類型 智能指針是這樣一些數(shù)據(jù)結(jié)構(gòu): 行為和指針相似 有額外的元數(shù)據(jù)和功能 通過記錄所有者的數(shù)量,使一份數(shù)據(jù)被多個(gè)

    2023年04月16日
    瀏覽(26)
  • 初學(xué)編程入門基礎(chǔ)教學(xué)視頻,中文編程開發(fā)語言工具箱之豪華編輯構(gòu)件,免費(fèi)版中文編程軟件下載

    初學(xué)編程入門基礎(chǔ)教學(xué)視頻,中文編程開發(fā)語言工具箱之豪華編輯構(gòu)件,免費(fèi)版中文編程軟件下載

    初學(xué)編程入門基礎(chǔ)教學(xué)視頻,中文編程開發(fā)語言工具箱之豪華編輯構(gòu)件,免費(fèi)版中文編程軟件下載 ?構(gòu)件的其中一個(gè)屬性、方法,查找內(nèi)容,替換內(nèi)容。 構(gòu)件工具箱非常豐富,其中該構(gòu)件在?文本件構(gòu)件板菜單下。 編程系統(tǒng)化課程總目錄及明細(xì),零基礎(chǔ)學(xué)中文編程視頻教程,

    2024年02月07日
    瀏覽(96)
  • Rust編程語言入門之函數(shù)式語言特性:-迭代器和閉包

    閉包(closures) 迭代器(iterators) 優(yōu)化改善 12 章的實(shí)例項(xiàng)目 討論閉包和迭代器的運(yùn)行時(shí)性能 閉包:可以捕獲其所在環(huán)境的匿名函數(shù)。 閉包: 是匿名函數(shù) 保存為變量、作為參數(shù) 可在一個(gè)地方創(chuàng)建閉包,然后在另一個(gè)上下文中調(diào)用閉包來完成運(yùn)算 可從其定義的作用域捕獲值

    2023年04月08日
    瀏覽(27)
  • 【Rust 基礎(chǔ)篇】Rust FFI:連接Rust與其他編程語言的橋梁

    Rust是一種以安全性和高效性著稱的系統(tǒng)級編程語言,具有出色的性能和內(nèi)存安全特性。然而,在現(xiàn)實(shí)世界中,我們很少有項(xiàng)目是完全用一種編程語言編寫的。通常,我們需要在項(xiàng)目中使用多種編程語言,特別是在與現(xiàn)有代碼庫或底層系統(tǒng)交互時(shí)。為了實(shí)現(xiàn)跨語言的互操作性,

    2024年02月15日
    瀏覽(29)
  • Rust編程語言入門之cargo、crates.io

    通過 release profile 來自定義構(gòu)建 在https://crates.io/上發(fā)布庫 通過 workspaces 組織大工程 從 https://crates.io/來安裝庫 使用自定義命令擴(kuò)展 cargo release profile: 是預(yù)定義的 可自定義:可使用不同的配置,對代碼編譯擁有更多的控制 每個(gè) profile 的配置都獨(dú)立于其它的 profile cargo 主要的

    2023年04月09日
    瀏覽(28)
  • 中文編程開發(fā)語言工具系統(tǒng)化教程零基礎(chǔ)入門篇和初級1專輯課程已經(jīng)上線,可以進(jìn)入輕松學(xué)編程

    中文編程開發(fā)語言工具系統(tǒng)化教程零基礎(chǔ)入門篇和初級1專輯課程已經(jīng)上線,可以進(jìn)入輕松學(xué)編程

    中文編程開發(fā)語言工具系統(tǒng)化教程零基礎(chǔ)入門篇和初級1專輯課程已經(jīng)上線,可以進(jìn)入輕松學(xué)編程 學(xué)習(xí)編程捷徑:(不論是正在學(xué)習(xí)編程的大學(xué)生,還是IT人士或者是編程愛好者,在學(xué)習(xí)編程的過程中用正確的學(xué)習(xí)方法 可以達(dá)到事半功倍的效果。對于初學(xué)者,可以通過下面的

    2024年02月08日
    瀏覽(108)
  • 【GO】go語言入門實(shí)戰(zhàn) —— 猜數(shù)字游戲

    程序介紹 首先生成一個(gè)介于1~100之間的隨機(jī)數(shù),然后提示玩家輸入數(shù)字,并告訴玩家是猜對了還是猜錯(cuò)了,如果對了程序就結(jié)束,如果錯(cuò)了就提醒玩家是大了還是小了,然后玩家繼續(xù)輸入。 設(shè)置隨機(jī)數(shù) rand.Seed(seed int64) :播種 seed 為隨機(jī)數(shù)種子 func time.Now() time.Time :獲取當(dāng)前

    2024年02月15日
    瀏覽(22)
  • Rust編程語言入門之最后的項(xiàng)目:多線程 Web 服務(wù)器

    在 socket 上監(jiān)聽 TCP 連接 解析少量的 HTTP 請求 創(chuàng)建一個(gè)合適的 HTTP 響應(yīng) 使用線程池改進(jìn)服務(wù)器的吞吐量 優(yōu)雅的停機(jī)和清理 注意:并不是最佳實(shí)踐 創(chuàng)建項(xiàng)目 main.rs 文件 修改一: 修改二: 修改三: 修改四: 修改五: hello.html 文件 404.html 文件 單線程Web服務(wù)器 開啟線程 lib.r

    2023年04月25日
    瀏覽(24)
  • Rust語言從入門到入坑——(2)Rust在windows上搭建開發(fā)環(huán)境

    Rust語言從入門到入坑——(2)Rust在windows上搭建開發(fā)環(huán)境

    開始搭建一個(gè)適合在windows上運(yùn)行的Rust環(huán)境。 Rust支持的程序語言很多:可詳見官網(wǎng)介紹 本文章主要是在windowns下搭建開發(fā)環(huán)境 首先,需要安裝最新版的 Rust 編譯工具和 Visual Studio Code。 Rust 編譯工具:https://www.rust-lang.org/zh-CN/tools/install Visual Studio Code:https://code.visualstudio.com

    2024年02月09日
    瀏覽(23)
  • 【跟小嘉學(xué) Rust 編程】三十三、Rust的Web開發(fā)框架之一: Actix-Web的基礎(chǔ)

    【跟小嘉學(xué) Rust 編程】三十三、Rust的Web開發(fā)框架之一: Actix-Web的基礎(chǔ)

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月04日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包