亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Rust 基礎(chǔ)語法

變量,基本類型,函數(shù),注釋和控制流,這些幾乎是每種編程語言都具有的編程概念。

這些基礎(chǔ)概念將存在于每個 Rust 程序中,及早學(xué)習(xí)它們將使你以最快的速度學(xué)習(xí) Rust 的使用。

變量

首先必須說明,Rust 是強(qiáng)類型語言,但具有自動判斷變量類型的能力。這很容易讓人與弱類型語言產(chǎn)生混淆。

如果要聲明變量,需要使用 let 關(guān)鍵字。例如:

let a = 123;

只學(xué)習(xí)過 JavaScript 的開發(fā)者對這句話很敏感,只學(xué)習(xí)過 C 語言的開發(fā)者對這句話很不理解。

在這句聲明語句之后,以下三行代碼都是被禁止的:

a = "abc";
a = 4.56; 
a = 456;

第一行的錯誤在于當(dāng)聲明 a 是 123 以后,a 就被確定為整型數(shù)字,不能把字符串類型的值賦給它。

第二行的錯誤在于自動轉(zhuǎn)換數(shù)字精度有損失,Rust 語言不允許精度有損失的自動數(shù)據(jù)類型轉(zhuǎn)換。

第三行的錯誤在于 a 不是個可變變量。

前兩種錯誤很容易理解,但第三個是什么意思?難道 a 不是個變量嗎?

這就牽扯到了 Rust 語言為了高并發(fā)安全而做的設(shè)計(jì):在語言層面盡量少的讓變量的值可以改變。所以 a 的值不可變。但這不意味著 a 不是"變量"(英文中的 variable),官方文檔稱 a 這種變量為"不可變變量"。

如果我們編寫的程序的一部分在假設(shè)值永遠(yuǎn)不會改變的情況下運(yùn)行,而我們代碼的另一部分在改變該值,那么代碼的第一部分可能就不會按照設(shè)計(jì)的意圖去運(yùn)轉(zhuǎn)。由于這種原因造成的錯誤很難在事后找到。這是 Rust 語言設(shè)計(jì)這種機(jī)制的原因。

當(dāng)然,使變量變得"可變"(mutable)只需一個 mut 關(guān)鍵字。

let mut a = 123;
a = 456;

這個程序是正確的。

常量與不可變變量的區(qū)別

既然不可變變量是不可變的,那不就是常量嗎?為什么叫變量?

變量和常量還是有區(qū)別的。在 Rust 中,以下程序是合法的:

let a = 123;
let a = 456;

但是如果 a 是常量就不合法:

const a: i32 = 123;
let a = 456;

變量的值可以"重新綁定",但在"重新綁定"以前不能私自被改變,這樣可以確保在每一次"綁定"之后的區(qū)域里編譯器可以充分的推理程序邏輯。 雖然 Rust 有自動判斷類型的功能,但有些情況下聲明類型更加方便:

let a: u64 = 123;

這里聲明了 a 為無符號 64 位整型變量,如果沒有聲明類型,a 將自動被判斷為有符號 32 位整型變量,這對于 a 的取值范圍有很大的影響。

重影(Shadowing)

重影的概念與其他面向?qū)ο笳Z言里的"重寫"(Override)或"重載"(Overload)是不一樣的。重影就是剛才講述的所謂"重新綁定",之所以加引號就是為了在沒有介紹這個概念的時候代替一下概念。

重影就是指變量的名稱可以被重新使用的機(jī)制:

fn main() {
    let x = 5;
    let x = x + 1;
    let x = x * 2;
    println!("The value of x is: {}", x);
}

這段程序的運(yùn)行結(jié)果:

The value of x is: 12

重影與可變變量的賦值不是一個概念,重影是指用同一個名字重新代表另一個變量實(shí)體,其類型、可變屬性和值都可以變化。但可變變量賦值僅能發(fā)生值的變化。

let mut s = "123";
s = s.len();

這段程序會出錯:不能給字符串變量賦整型值。