W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
幾乎所有非 “Hello World” Rust 程序使用變量綁定。如下的形式:
fn main() {
let x = 5;
}
在每個(gè)例子中都寫(xiě) fn main(){
顯得有點(diǎn)冗余,所以在以后我們會(huì)省略掉它。如果你一直跟著教程學(xué)習(xí),確保修改你的 mian()
函數(shù),而不是丟掉了它。否則,你的程序編譯會(huì)得到一個(gè)錯(cuò)誤。
在許多語(yǔ)言中,這被稱為一個(gè)變量,但 Rust 中的變量綁定有一些小竅門(mén)需要注意。例如讓表達(dá)式的左邊是一個(gè) “pattern”,而不僅僅是一個(gè)變量名。這意味著我們可以這樣做:
let (x, y) = (1, 2);
這個(gè)表達(dá)式求值后,x 將會(huì)被賦值為 1,y 將會(huì)被賦值為 2。Pattern 是非常的強(qiáng)大,在本教程中有專門(mén)的章節(jié)講解。我們暫時(shí)不需要這些功能,所以我們就把暫時(shí)不關(guān)注這個(gè),繼續(xù)學(xué)習(xí)本節(jié)的知識(shí)。
Rust 是一種靜態(tài)類型語(yǔ)言,這意味著我們要提前指定類型,并且在編譯時(shí)期被檢查。那么,為什么我們的第一個(gè)例子能夠被編譯?Rust 有個(gè)稱為“類型推斷”的機(jī)制。如果它能推斷出變量是什么類型,Rust 就不需要指定實(shí)際類型。
如果想要我們可以添加它的類型。在冒號(hào)(:)之后輸入類型:
let x: i32 = 5;
如果我要求你將上面的大聲讀給班上的其他同學(xué),你會(huì)說(shuō) “x 被綁定為 i32 類型,并且它的值為5?!?/p>
在這種情況下,我們選擇將 x 表示為一個(gè) 32 位帶符號(hào)整數(shù)。Rust 有許多不同的基本的整數(shù)類型。以 i 開(kāi)頭的表示有符號(hào)整型,u 開(kāi)頭的表示無(wú)符號(hào)整型。可能的整數(shù)尺寸是 8、16、32、64 位。
在以后的例子中,我們可能會(huì)在注釋中說(shuō)明其類型。以后的例子會(huì)看起來(lái)像這樣:
fn main() {
let x = 5; // x: i32
}
注意使用 let 的語(yǔ)法和注釋表示的是相似的。和讓您所使用的語(yǔ)法。Rust 中包含上面的注釋方式,但它不是通用的方式,因此我們會(huì)偶爾的使用上面的注釋方式來(lái)幫助你理解變量表示 Rust 中的實(shí)際類型。
默認(rèn)情況下,綁定是不可變的。這段代碼將不會(huì)編譯通過(guò):
let x = 5;
x = 10;
它將會(huì)輸出如下的錯(cuò)誤:
error: re-assignment of immutable variable `x`
x = 10;
^~~~~~~
如果你想綁定是可變的,您可以使用 mut 關(guān)鍵字:
let mut x = 5; // mut x:i32
x = 10;
沒(méi)有原因說(shuō)明默認(rèn)綁定是不可變的,但我們可以通過(guò)考慮 Rust 關(guān)注的一個(gè)要點(diǎn):安全性。如果你忘了什么 mut,編譯器會(huì)捕捉到它,讓你知道你修改了某些值但是你可能沒(méi)有聲明該值為 mut。如果綁定默認(rèn)情況下是可變的,那么編譯器將無(wú)法告訴你這一點(diǎn)。如果你的確想修改變量值,那么解決方案很簡(jiǎn)單:添加 mut。
還有其他理由避免出現(xiàn)可變狀態(tài),但他們超出本指南的范圍。一般來(lái)說(shuō),通??梢员苊怙@式變化,那也是 Rust 所推薦的。也就是說(shuō),有時(shí),修改變量是你需要的,但是它不是禁止的。
讓我們回到綁定。Rust 變量綁定與其他語(yǔ)言有一個(gè)方面是不同:在你能夠使用綁定變量之前你要初始化該變量。
讓我們來(lái)自己動(dòng)手試一試。修改 src/main.rc 文件,使其中的內(nèi)容像下面的一樣:
fn main() {
let x: i32;
println!("Hello world!");
}
你可以在命令行中使用 cargo build 命令對(duì)該文件進(jìn)行編譯 。盡管你會(huì)得到一個(gè)警告,但是仍然會(huì)打印 ”Hello, world!“:
Compiling hello_world v0.0.1 (file:///home/you/projects/hello_world)
src/main.rs:2:9: 2:10 warning: unused variable: `x`, #[warn(unused_variable)]
on by default
src/main.rs:2 let x: i32;
^
Rust 警告我們從來(lái)沒(méi)有使用這個(gè)變量綁定,但是因?yàn)槲覀儚膩?lái)沒(méi)有使用它,沒(méi)有破壞性,沒(méi)有惡意。然后,如果我們?cè)噲D使用變量 x 事情就會(huì)發(fā)生變化。讓我們來(lái)試一下。改變你的程序?yàn)槿缦碌臉幼?
fn main() {
let x: i32;
println!("The value of x is:{}", x);
}
嘗試編譯上面的代碼。將會(huì)看到輸出一個(gè)錯(cuò)誤:
$ cargo build
Compiling hello_world v0.0.1 (file:///home/you/projects/hello_world)
src/main.rs:4:39: 4:40 error: use of possibly uninitialized variable: `x`
src/main.rs:4 println!("The value of x is: {}", x);
^
note: in expansion of format_args!
<std macros>:2:23: 2:77 note: expansion site
<std macros>:1:1: 3:2 note: in expansion of println!
src/main.rs:4:5: 4:42 note: expansion site
error: aborting due to previous error
Could not compile `hello_world`.
Rust 不會(huì)讓我們使用未初始化的變量。接下來(lái),讓我們談?wù)勌砑拥?println! 中的東西。
如果在你打印的字符串語(yǔ)句中包含花括號(hào)({}),Rust 將這個(gè)視為請(qǐng)求插入某種值。字符串插入值是一個(gè)計(jì)算機(jī)科學(xué)名詞,它的意思是“粘在字符串的中間?!拔覀兲砑右粋€(gè)逗號(hào),然后是 x,表明我們希望插入的是 x 的值。如果傳遞給函數(shù)和宏的參數(shù)不止一個(gè),我們用逗號(hào)對(duì)參數(shù)進(jìn)行分隔。
當(dāng)你僅僅只是使用花括號(hào),Rust 通過(guò)檢查它的類型將嘗試以一種有意義的方式顯示它的值。如果你想用更詳細(xì)的方式指定打印格式,請(qǐng)查看多個(gè)可選參數(shù)可用。此時(shí),我們只關(guān)注默認(rèn)值:整數(shù)打印起來(lái)并不是很復(fù)雜。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: