rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国
導讀:你可以嘗試以多種語言編程一個簡單的游戲來開始編程之路。
本文字數:4068,閱讀時長大約: 5分鐘
https://linux.cn/article-12979-1.html
作者:Moshe Zadka
譯者:Xingyu.Wang
當你想學習一門新的編程語言時,不妨關注一下編程語言的共同點。
? 變量
? 表達式
? 語句
這些概念是大多數編程語言的基礎。一旦你理解了它們,你就可以開始弄清楚其余的東西。
因為編程語言通常具有相似性,一旦你懂了一種語言,你就可以通過理解其差異來學習另一種語言的基礎知識。
學習新語言的一個好方法是使用一個你可以用來練習的標準程序。這可以讓你專注于語言,而不是程序的邏輯。我在這一系列文章中使用了一個“猜數字”的程序,在這個程序中,電腦會在 1 到 100 之間選一個數字讓你猜。程序一直循環,直到你猜對數字為止。
這個程序鍛煉了編程語言的幾個概念:
? 變量
? 輸入
? 輸出
? 條件評估
? 循環
這是學習一門新編程語言的很好的實踐實驗。
安裝 Rust
你可以,或者你可以 而不在本地安裝它。
如果你在本地安裝,你應該定期用rustup update來更新它,以保持你的工具鏈的新鮮,并使用cargo update來保持你的庫的最新版本。
Rust 語言版本的猜數字
是一門賦予任何人構建可靠和高效的軟件能力的語言。你可以通過編寫一個 Rust 版本的“猜數字”游戲來探索 Rust。
第一步是編寫一個Cargo.toml文件。你可以使用cargo new命令生成一個骨架Cargo.toml。這幾乎是開始一個 Rust 項目的最佳方式。
$ cargo new guess
$ cd guess
$ ls -1
Cargo.toml
src/
Cargo.toml文件為你的包命名,并給它一些元數據,最重要的是,指明了它依賴于rand。
[package]
name = "guess"
version = "2020.11.0"
authors = ["Moshe Zadka "]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rand = "*"
Rust 中的許多東西不是由語言或標準庫提供的。取而代之的是,你可以從某個外部 crate 得到它們,這些 crate 可以做許多事情。
程序邏輯在src/main.rs中:
use rand::Rng;
use std::io::BufRead;
fn main() {
let mut rng = rand::thread_rng();
let random = rng.gen_range(1..101);
println!("Guess a number between 1 and 100");
for line in std::io::stdin().lock().lines() {
let parsed = line.ok().as_deref().map(str::parse::);
if let Some(Ok(guess)) = parsed {
match guess {
_ if guess < random => println!("Too low"),
_ if guess > random => println!("Too high"),
_ => {
println!("That's right");
break;
}
}
}
}
}
代碼的前兩行聲明你要做什么。在本例中,rand::Rng生成一個猜測值,而std::io::BufRead使得可以從標準輸入中讀取。
Rust 代碼的入口在main()函數中,所以下一步就是定義main()。
要給一個變量賦值,先放let,再放變量的名字,后面放=號。這樣就創建了一個變量。
Rust 中大多數變量都是不可變的,但是rng對象必須是可變的(mut)。例如,語句let random = 0給random變量分配一個零值。
函數的第一行創建了一個線程安全的Rng對象,并將其分配給變量rng。Rust 是建立在線程和內存安全的基礎上的,所以你必須在開始寫代碼時就考慮到這些事情。
程序的下一行讀取函數gen_range()的結果,并將其分配給名為random的變量。該函數取一個最小值(包含)和一個上界(不包含)。為了也包含上界,你可以用一個等號來標記較大的數字(例如,1...=100),或者你也可以像我在代碼中做的那樣,將上界設置為比你的預期最大值大 1。在這種情況下,該范圍是1到100,使得游戲剛好有足夠的挑戰性。
中央循環在std::io::stdin()中迭代行。由于有各種可能導致行不能讀取的例外情況,Rust 要求你用一個Result來包裹一行。有時候可能無法將一行解析為一個整數。
這段代碼使用條件模式匹配來忽略所有會導致錯誤的行:
let parsed = line.ok().as_deref().map(str::parse::);
if let Some(Ok(guess)) = parsed {
// ...
}
第一行創建了一個Result, ...>對象,因為它可能在讀取或解析步驟中失敗。由于下一行只在Some(Ok(guess))上匹配,每當一行的結果是一個不匹配的值時,它就會跳過if語句。這是一種強大的忽略錯誤的方法。
Rust 支持條件表達式和流程控制,比如循環。在“猜數字”游戲中,只要猜中的值不等于random,Rust 就會繼續循環。
if語句的主體包含一個 Rust 的match語句的三向分支。雖然match最常用于模式匹配,但它也可以檢查任意條件。在這種情況下是打印一個適當的信息,如果猜測是正確的,則中斷(break)循環。
示例輸出
現在你已經寫好了你的 Rust 程序,你可以運行它來玩“猜數字”游戲。每次運行程序時,Rust 都會選擇一個不同的隨機數,所以繼續猜,直到找到正確的數字。
$ cargo run
Compiling guess v2020.11.0 (/Users/mzadka/src/guess)
Finished dev [unoptimized + debuginfo] target(s) in 0.70s
Running `target/debug/guess`
Guess a number between 1 and 100
50
Too high
25
Too high
12
Too low
18
Too high
15
Too high
13
Too low
14
That's right
典型的做法是用cargo run來測試程序。最終,你可能會使用cargo build分成兩個獨立的步驟。
學習 Rust
這個“猜數字”游戲是學習一門新的編程語言的一個很好的入門程序,因為它以一種相當直接的方式鍛煉了幾個常見的編程概念。通過在不同的編程語言中實現這個簡單的游戲,你可以展示語言的一些核心概念,并比較它們的細節。
你有喜歡的編程語言嗎?你會如何用它來寫“猜數字”游戲呢?請關注本系列文章,看看你可能感興趣的其他編程語言的例子吧!
via:
作者: 選題: 譯者: 校對:
本文由 原創編譯, 榮譽推出
歡迎遵照 CC-BY-NC-SA 協議規定轉載,
總結
以上是生活随笔為你收集整理的rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓手机sd卡在哪里打开(安卓手机sd)
- 下一篇: 安居房备案回执号查询(安居房备案)