rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国
導(dǎo)讀:你可以嘗試以多種語言編程一個簡單的游戲來開始編程之路。
本文字?jǐn)?shù):4068,閱讀時長大約: 5分鐘
https://linux.cn/article-12979-1.html
作者:Moshe Zadka
譯者:Xingyu.Wang
當(dāng)你想學(xué)習(xí)一門新的編程語言時,不妨關(guān)注一下編程語言的共同點。
? 變量
? 表達式
? 語句
這些概念是大多數(shù)編程語言的基礎(chǔ)。一旦你理解了它們,你就可以開始弄清楚其余的東西。
因為編程語言通常具有相似性,一旦你懂了一種語言,你就可以通過理解其差異來學(xué)習(xí)另一種語言的基礎(chǔ)知識。
學(xué)習(xí)新語言的一個好方法是使用一個你可以用來練習(xí)的標(biāo)準(zhǔn)程序。這可以讓你專注于語言,而不是程序的邏輯。我在這一系列文章中使用了一個“猜數(shù)字”的程序,在這個程序中,電腦會在 1 到 100 之間選一個數(shù)字讓你猜。程序一直循環(huán),直到你猜對數(shù)字為止。
這個程序鍛煉了編程語言的幾個概念:
? 變量
? 輸入
? 輸出
? 條件評估
? 循環(huán)
這是學(xué)習(xí)一門新編程語言的很好的實踐實驗。
安裝 Rust
你可以,或者你可以 而不在本地安裝它。
如果你在本地安裝,你應(yīng)該定期用rustup update來更新它,以保持你的工具鏈的新鮮,并使用cargo update來保持你的庫的最新版本。
Rust 語言版本的猜數(shù)字
是一門賦予任何人構(gòu)建可靠和高效的軟件能力的語言。你可以通過編寫一個 Rust 版本的“猜數(shù)字”游戲來探索 Rust。
第一步是編寫一個Cargo.toml文件。你可以使用cargo new命令生成一個骨架Cargo.toml。這幾乎是開始一個 Rust 項目的最佳方式。
$ cargo new guess
$ cd guess
$ ls -1
Cargo.toml
src/
Cargo.toml文件為你的包命名,并給它一些元數(shù)據(jù),最重要的是,指明了它依賴于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 中的許多東西不是由語言或標(biāo)準(zhǔn)庫提供的。取而代之的是,你可以從某個外部 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使得可以從標(biāo)準(zhǔn)輸入中讀取。
Rust 代碼的入口在main()函數(shù)中,所以下一步就是定義main()。
要給一個變量賦值,先放let,再放變量的名字,后面放=號。這樣就創(chuàng)建了一個變量。
Rust 中大多數(shù)變量都是不可變的,但是rng對象必須是可變的(mut)。例如,語句let random = 0給random變量分配一個零值。
函數(shù)的第一行創(chuàng)建了一個線程安全的Rng對象,并將其分配給變量rng。Rust 是建立在線程和內(nèi)存安全的基礎(chǔ)上的,所以你必須在開始寫代碼時就考慮到這些事情。
程序的下一行讀取函數(shù)gen_range()的結(jié)果,并將其分配給名為random的變量。該函數(shù)取一個最小值(包含)和一個上界(不包含)。為了也包含上界,你可以用一個等號來標(biāo)記較大的數(shù)字(例如,1...=100),或者你也可以像我在代碼中做的那樣,將上界設(shè)置為比你的預(yù)期最大值大 1。在這種情況下,該范圍是1到100,使得游戲剛好有足夠的挑戰(zhàn)性。
中央循環(huán)在std::io::stdin()中迭代行。由于有各種可能導(dǎo)致行不能讀取的例外情況,Rust 要求你用一個Result來包裹一行。有時候可能無法將一行解析為一個整數(shù)。
這段代碼使用條件模式匹配來忽略所有會導(dǎo)致錯誤的行:
let parsed = line.ok().as_deref().map(str::parse::);
if let Some(Ok(guess)) = parsed {
// ...
}
第一行創(chuàng)建了一個Result, ...>對象,因為它可能在讀取或解析步驟中失敗。由于下一行只在Some(Ok(guess))上匹配,每當(dāng)一行的結(jié)果是一個不匹配的值時,它就會跳過if語句。這是一種強大的忽略錯誤的方法。
Rust 支持條件表達式和流程控制,比如循環(huán)。在“猜數(shù)字”游戲中,只要猜中的值不等于random,Rust 就會繼續(xù)循環(huán)。
if語句的主體包含一個 Rust 的match語句的三向分支。雖然match最常用于模式匹配,但它也可以檢查任意條件。在這種情況下是打印一個適當(dāng)?shù)男畔?#xff0c;如果猜測是正確的,則中斷(break)循環(huán)。
示例輸出
現(xiàn)在你已經(jīng)寫好了你的 Rust 程序,你可以運行它來玩“猜數(shù)字”游戲。每次運行程序時,Rust 都會選擇一個不同的隨機數(shù),所以繼續(xù)猜,直到找到正確的數(shù)字。
$ 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分成兩個獨立的步驟。
學(xué)習(xí) Rust
這個“猜數(shù)字”游戲是學(xué)習(xí)一門新的編程語言的一個很好的入門程序,因為它以一種相當(dāng)直接的方式鍛煉了幾個常見的編程概念。通過在不同的編程語言中實現(xiàn)這個簡單的游戲,你可以展示語言的一些核心概念,并比較它們的細(xì)節(jié)。
你有喜歡的編程語言嗎?你會如何用它來寫“猜數(shù)字”游戲呢?請關(guān)注本系列文章,看看你可能感興趣的其他編程語言的例子吧!
via:
作者: 選題: 譯者: 校對:
本文由 原創(chuàng)編譯, 榮譽推出
歡迎遵照 CC-BY-NC-SA 協(xié)議規(guī)定轉(zhuǎn)載,
總結(jié)
以上是生活随笔為你收集整理的rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓手机sd卡在哪里打开(安卓手机sd)
- 下一篇: linux权限c是什么意思,linux服