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

Rust 程序設(shè)計(jì)語(yǔ)言學(xué)習(xí)——基礎(chǔ)語(yǔ)法

這篇具有很好參考價(jià)值的文章主要介紹了Rust 程序設(shè)計(jì)語(yǔ)言學(xué)習(xí)——基礎(chǔ)語(yǔ)法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Rust 語(yǔ)言是一種高效、可靠的通用高級(jí)語(yǔ)言。其高效不僅限于開(kāi)發(fā)效率,它的執(zhí)行效率也是令人稱贊的,是一種少有的兼顧開(kāi)發(fā)效率和執(zhí)行效率的語(yǔ)言。

Rust 語(yǔ)言由 Mozilla 開(kāi)發(fā),最早發(fā)布于 2014 年 9 月。Rust 的編譯器是在 MIT License 和 Apache License 2.0 雙重協(xié)議聲明下的免費(fèi)開(kāi)源軟件。

Rust 官方在線工具: https://play.rust-lang.org/。

一、Rust 語(yǔ)言的特點(diǎn)

  • 高性能:Rust 速度驚人且內(nèi)存利用率極高。由于沒(méi)有運(yùn)行時(shí)和垃圾回收,它能夠勝任對(duì)性能要求特別高的服務(wù),可以在嵌入式設(shè)備上運(yùn)行,還能輕松和其他語(yǔ)言集成。

  • 可靠性:Rust 豐富的類型系統(tǒng)和所有權(quán)模型保證了內(nèi)存安全和線程安全,在編譯期就能夠消除各種各樣的錯(cuò)誤。

  • 生產(chǎn)力:Rust 擁有出色的文檔、友好的編譯器和清晰的錯(cuò)誤提示信息,還集成了一流的工具 —— 包管理器和構(gòu)建工具, 智能地自動(dòng)補(bǔ)全和類型檢驗(yàn)的多編輯器支持,以及自動(dòng)格式化代碼等等。

二、基礎(chǔ)語(yǔ)法

第一個(gè) Rust 程序

Rust 語(yǔ)言代碼文件后綴名為 .rs, 如 helloworld.rs。

fn main() {
    println!("Hello World!");
}

使用 rustc 命令編譯 helloworld.rs 文件:

$ rustc helloworld.rs # 編譯 helloworld.rs 文件

編譯后會(huì)生成 helloworld 可執(zhí)行文件:

$ ./helloworld # 執(zhí)行 helloworld

Hello World!

2.1 簡(jiǎn)要介紹 println!() 和 print!()

println!( “Hello World”) 中的 println 后面還有一個(gè) ! 符號(hào),println 不是一個(gè)函數(shù),而是一個(gè)宏規(guī)則。

Rust 輸出文字的方式主要有兩種:println!()print!()。這兩個(gè)"函數(shù)"都是向命令行輸出字符串的方法,區(qū)別僅在于前者會(huì)在輸出的最后附加輸出一個(gè)換行符。當(dāng)用這兩個(gè)"函數(shù)"輸出信息的時(shí)候,第一個(gè)參數(shù)是格式字符串,后面是一串可變參數(shù),對(duì)應(yīng)著格式字符串中的"占位符",這一點(diǎn)與 C 語(yǔ)言中的 printf 函數(shù)很相似。但是,Rust 中格式字符串中的占位符不是 “% + 字母” 的形式,而是一對(duì) {}。

fn main() {
    let a = 12;
    let b = 12.5;
    println!("a is {}, b is {}", a, b);
}

運(yùn)行結(jié)果:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-814291.html

a is 12, b is 12.5

如果想把 a 輸出兩遍,那豈不是要寫成:

println!("a is {}, a again is {}", a, a);

其實(shí)有更好的寫法:

println!("a is {0}, a again is {0}", a);

在 {} 之間可以放一個(gè)數(shù)字,它將把之后的可變參數(shù)當(dāng)作一個(gè)數(shù)組來(lái)訪問(wèn),下標(biāo)從 0 開(kāi)始。

如果要輸出 { 或 } 怎么辦呢?格式字符串中通過(guò) {{ 和 }} 分別轉(zhuǎn)義代表 { 和 }。但是其他常用轉(zhuǎn)義字符與 C 語(yǔ)言里的轉(zhuǎn)義字符一樣,都是反斜杠開(kāi)頭的形式。

fn main() { 
    println!("{{}}"); 
}

以上程序的輸出結(jié)果是:

{}

2.2 變量

Rust 是強(qiáng)類型語(yǔ)言,但具有自動(dòng)判斷變量類型的能力。這很容易讓人與弱類型語(yǔ)言產(chǎn)生混淆。如果要聲明變量,需要使用 let 關(guān)鍵字。例如:let a = 123;,只學(xué)習(xí)過(guò) JavaScript 的開(kāi)發(fā)者對(duì)這句話很敏感,只學(xué)習(xí)過(guò) C 語(yǔ)言的開(kāi)發(fā)者對(duì)這句話很不理解。

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

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

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

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

第三行的錯(cuò)誤在于 a 不是個(gè)可變變量。

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

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

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

fn main() {
    let mut a = 123;
    println!("a is {}", a);
    a = 456;
    println!("a is {}", a);
}

這個(gè)程序是正確的。

a is 123
a is 456

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

既然不可變變量是不可變的,那不就是常量嗎?為什么叫變量?變量和常量還是有區(qū)別的。在 Rust 中,以下程序是合法的:

let a = 123;   // 可以編譯,但可能有警告,因?yàn)樵撟兞繘](méi)有被使用
let a = 456;

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

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

報(bào)錯(cuò)如下:

   Compiling playground v0.0.1 (/playground)
error[E0005]: refutable pattern in local binding
 --> src/main.rs:3:9
  |
3 |     let a = 456;
  |         ^
  |         |
  |         patterns `i32::MIN..=122_i32` and `124_i32..=i32::MAX` not covered
  |         missing patterns are not covered because `a` is interpreted as a constant pattern, not a new variable
  |         help: introduce a variable instead: `a_var`
  |
  = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
  = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
  = note: the matched value is of type `i32`

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

let a: u64 = 123;

這里聲明了 a 為無(wú)符號(hào) 64 位整型變量,如果沒(méi)有聲明類型,a 將自動(dòng)被判斷為有符號(hào) 32 位整型變量,這對(duì)于 a 的取值范圍有很大的影響。

2.3 重影(Shadowing)

重影的概念與其他面向?qū)ο笳Z(yǔ)言里的"重寫"(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

再來(lái)看一個(gè)例子

fn main() {
    let x = 5; // warning: unused variable: `x`
    let x = 1.5;
    let x = x * 2.0;
    println!("The value of x is: {}", x);
}

運(yùn)行結(jié)果:

The value of x is: 3

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

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

這段程序會(huì)出錯(cuò):不能給字符串變量賦整型值。

2.4 數(shù)據(jù)類型

Rust 語(yǔ)言中的基礎(chǔ)數(shù)據(jù)類型有以下幾種。

2.4.1 整型(Integer)

整數(shù)型簡(jiǎn)稱整型,按照比特位長(zhǎng)度和有無(wú)符號(hào)分為以下種類:

位長(zhǎng)度 有符號(hào) 無(wú)符號(hào)
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
128-bit i128 u128
arch isize usize

isize 和 usize 兩種整數(shù)類型是用來(lái)衡量數(shù)據(jù)大小的,它們的位長(zhǎng)度取決于所運(yùn)行的目標(biāo)平臺(tái),如果是 32 位架構(gòu)的處理器將使用 32 位位長(zhǎng)度整型。

整數(shù)的表述方法有以下幾種:

進(jìn)制
十進(jìn)制 98_222
十六進(jìn)制 0xff
八進(jìn)制 0o77
二進(jìn)制 0b1111_0000
字節(jié)(只能表示 u8 型) b’A’

有的整數(shù)中間存在一個(gè)下劃線,這種設(shè)計(jì)可以讓人們?cè)谳斎胍粋€(gè)很大的數(shù)字時(shí)更容易判斷數(shù)字的值大概是多少。

例如:

fn main() {
    let x = 598_000;
    println!("The value of x is: {}", x);
}

運(yùn)行結(jié)果:

The value of x is: 598000
2.4.2 浮點(diǎn)數(shù)型(Floating-Point)

Rust 與其它語(yǔ)言一樣支持 32 位浮點(diǎn)數(shù)(f32)和 64 位浮點(diǎn)數(shù)(f64)。默認(rèn)情況下,64.0 將表示 64 位浮點(diǎn)數(shù),因?yàn)楝F(xiàn)代計(jì)算機(jī)處理器對(duì)兩種浮點(diǎn)數(shù)計(jì)算的速度幾乎相同,但 64 位浮點(diǎn)數(shù)精度更高。

fn main() {
    let x = 2.0; // f64
    let y: f32 = 3.0; // f32
}

數(shù)學(xué)運(yùn)算

用一段程序反映數(shù)學(xué)運(yùn)算:

fn main() {
    let sum = 5 + 10; // 加
    let difference = 95.5 - 4.3; // 減
    let product = 4 * 30; // 乘
    let quotient = 56.7 / 32.2; // 除
    let remainder = 43 % 5; // 求余
}

許多運(yùn)算符號(hào)之后加上 = 號(hào)是自運(yùn)算的意思,例如:

sum += 1 等同于 sum = sum + 1。

注意:Rust 不支持 ++ 和 --,因?yàn)檫@兩個(gè)運(yùn)算符出現(xiàn)在變量的前后會(huì)影響代碼可讀性,減弱了開(kāi)發(fā)者對(duì)變量改變的意識(shí)能力。

2.4.3 布爾型

布爾型用 bool 表示,值只能為 true 或 false。

2.4.4 字符型

字符型用 char 表示。Rust 的 char 類型大小為 4 個(gè)字節(jié),代表 Unicode 標(biāo)量值,這意味著它可以支持中文、日文和韓文等非英文字符,甚至表情符號(hào)和零寬度空格在 Rust 中都是有效的 char 值。

Rust 使用 char 類型表示單個(gè)字符,但對(duì)字符串或文本流使用 UTF-8 編碼。因此,String 將其文本表示為一個(gè) UTF-8 字節(jié)的序列,而不是字符的數(shù)組。Rust 的 char 類型是語(yǔ)言中最原生的字母類型,例如:

fn main() {
    let c = 'z';
    let z = '?';
    let heart_eyed_cat = '?';
    println!("The value is: {} {} {}", c, z, heart_eyed_cat);
}

運(yùn)行結(jié)果:

The value is: z ? ?

Rust 還是提供了字節(jié)字面量(byte literal),即用類字符字面量表示的 u8 值:b’X’ 表示 ASCII 編碼的字符 X,它是一個(gè) u8 值。比如,由于字符 A 的 ASCII 編碼是 65,因此 b’A’ 等于 65u8。字節(jié)字面量中只能出現(xiàn) ASCII 編碼的字符。

注意:由于中文文字編碼有兩種(GBK 和 UTF-8),所以編程中使用中文字符串有可能導(dǎo)致亂碼的出現(xiàn),這是因?yàn)樵闯绦蚺c命令行的文字編碼不一致,所以在 Rust 中字符串和字符都必須使用 UTF-8 編碼,否則編譯器會(huì)報(bào)錯(cuò)。

2.4.5 復(fù)合類型

元組是用一對(duì) ( ) 包括的一組數(shù)據(jù),可以包含不同種類的數(shù)據(jù):

let tup: (i32, f64, u8) = (500, 6.4, 1);
// tup.0 等于 500
// tup.1 等于 6.4
// tup.2 等于 1
let (x, y, z) = tup;
// y 等于 6.4

程序首先創(chuàng)建了一個(gè)元組并綁定到 tup 變量上。接著使用了 let 和一個(gè)模式將 tup 分成了三個(gè)不同的變量 x、y 和 z。這叫做解構(gòu)(destructuring),因?yàn)樗鼘⒁粋€(gè)元組拆成了三個(gè)部分。

我們也可以使用點(diǎn)號(hào)(.)后跟值的索引來(lái)直接訪問(wèn)它們。例如:

fn main() {
    let x: (i32, f64, u8) = (500, 6.4, 1);

    let five_hundred = x.0;

    let six_point_four = x.1;

    let one = x.2;
}

這個(gè)程序創(chuàng)建了一個(gè)元組 x,然后使用其各自的索引訪問(wèn)元組中的每個(gè)元素。跟大多數(shù)編程語(yǔ)言一樣,元組的第一個(gè)索引值是 0。

不帶任何值的元組有個(gè)特殊的名稱,叫做單元(unit) 元組。這種值以及對(duì)應(yīng)的類型都寫作 (),表示空值或空的返回類型。如果表達(dá)式不返回任何其他值,則會(huì)隱式返回單元值。

數(shù)組用一對(duì) [ ] 包括的同類型數(shù)據(jù)。

let a = [1, 2, 3, 4, 5]; // a 是一個(gè)長(zhǎng)度為 5 的整型數(shù)組
let b = ["January", "February", "March"]; // b 是一個(gè)長(zhǎng)度為 3 的字符串?dāng)?shù)組
let c: [i32; 5] = [1, 2, 3, 4, 5]; // c 是一個(gè)長(zhǎng)度為 5 的 i32 數(shù)組
let d = [3; 5]; // 等同于 let d = [3, 3, 3, 3, 3];

let first = a[0]; // 數(shù)組訪問(wèn)
let second = a[1];

a[0] = 123; // 錯(cuò)誤:數(shù)組 a 不可變
let mut a = [1, 2, 3];
a[0] = 4; // 正確

2.5 注釋

Rust 中的注釋方式與其它語(yǔ)言(C、Java)一樣,雙斜杠的注釋方式前面已經(jīng)接觸過(guò),實(shí)際上支持三種注釋方式:

// 這是第一種注釋方式

/* 這是第二種注釋方式 */

/*
 * 多行注釋
 * 多行注釋
 * 多行注釋
 */

在 Rust 中使用 // 可以使其之后到第一個(gè)換行符的內(nèi)容變成注釋。

在這種規(guī)則下,三個(gè)正斜杠 /// 依然是合法的注釋開(kāi)始。所以 Rust 可以用 /// 作為說(shuō)明文檔注釋的開(kāi)頭:

///?Adds?one?to?the?number?given.
///
///?#?Examples
///
///?```
///?let x = add(1, 2);
///
///?```

fn add(a: i32, b: i32) -> i32 {
    return a + b;
}
   
fn main() {
    println!("{}",add(2, 3));
}

IDE 中加載的效果如下:

Rust 程序設(shè)計(jì)語(yǔ)言學(xué)習(xí)——基礎(chǔ)語(yǔ)法,Rust,rust,基礎(chǔ)語(yǔ)法,rs

2.6 函數(shù)

函數(shù)實(shí)際上前面已經(jīng)有所了解,運(yùn)行示例一直在使用 main 函數(shù)。Rust 函數(shù)的基本形式:

fn <函數(shù)名> ( <參數(shù)> ) -> <返回值類型> <函數(shù)體>

其中 Rust 函數(shù)名稱的命名風(fēng)格是小寫字母以下劃線分割:

fn main() {
    println!("Hello, world!");
    another_fn();
}

fn another_fn() {
    println!("Hello, another_fn!");
}

2.6.1 函數(shù)參數(shù)

Rust 中定義函數(shù)如果需要具備參數(shù)必須聲明參數(shù)名稱和類型:

fn main() {
    another_fn(100, 6);
}

fn another_fn(x: i32, y: i32) {
    println!("The value of x is {}. The value of y is {}", x, y);
}

運(yùn)行結(jié)果:

The value of x is 100. The value of y is 6

2.6.2 函數(shù)體表達(dá)式

Rust 中可以在一個(gè)用 {} 包括的塊里編寫一個(gè)較為復(fù)雜的表達(dá)式:

fn main() {
    let x = 100;

    let y = {
        let x = 20;
        x + 1
    };

    println!("The value of x is {}. The value of y is {}", x, y);
}

運(yùn)行結(jié)果:

The value of x is 100. The value of y is 21

很顯然,這段程序中包含了一個(gè)表達(dá)式塊:

let y = {
    let x = 20;
    x + 1
};

而且在塊中可以使用函數(shù)語(yǔ)句,最后一個(gè)步驟是表達(dá)式,此表達(dá)式的結(jié)果值是整個(gè)表達(dá)式塊所代表的值。這種表達(dá)式塊叫做函數(shù)體表達(dá)式。

注意:x + 1 之后沒(méi)有分號(hào),否則它將變成一條語(yǔ)句!

這種表達(dá)式塊是一個(gè)合法的函數(shù)體。而且在 Rust 中,函數(shù)定義可以嵌套:

fn main() {
    fn five() -> i32 {
        5
    }
    
    println!("The value of five() is {}.", five());
}

運(yùn)行結(jié)果:

The value of five() is 5.

2.6.3 函數(shù)返回值

Rust 函數(shù)聲明返回值類型的方式為在參數(shù)聲明之后用 -> 來(lái)聲明函數(shù)返回值的類型。在函數(shù)體中,隨時(shí)都可以以 return 關(guān)鍵字結(jié)束函數(shù)運(yùn)行并返回一個(gè)類型合適的值。這也是最接近大多數(shù)開(kāi)發(fā)者經(jīng)驗(yàn)的做法:

fn add(a: i32, b: i32) -> i32 {
    return a + b;
}

但是 Rust 不支持自動(dòng)返回值類型判斷!如果沒(méi)有明確聲明函數(shù)返回值的類型,函數(shù)將被認(rèn)為是"純過(guò)程",不允許產(chǎn)生返回值,return 后面不能有返回值表達(dá)式。

注意:函數(shù)體表達(dá)式并不能等同于函數(shù)體,它不能使用 return 關(guān)鍵字。

2.7 條件語(yǔ)句

在 Rust 語(yǔ)言中的條件語(yǔ)句是這種格式的:

fn main() {
    let number = 3;
    if number < 5 {
        println!("true");
    } else {
        println!("false");
    }
}

在上述程序中有條件 if 語(yǔ)句,這個(gè)語(yǔ)法在很多其它語(yǔ)言中很常見(jiàn),但也有一些區(qū)別:首先,條件表達(dá)式 number < 5 不需要用小括號(hào)包括(注意,不需要不是不允許);但是 Rust 中的 if 不存在單語(yǔ)句不用加 {} 的規(guī)則,不允許使用一個(gè)語(yǔ)句代替一個(gè)塊。盡管如此,Rust 還是支持傳統(tǒng) else-if 語(yǔ)法的:

fn main() {
    let x = 100;
    let y;
    if x > 0 {
        y = 1;
    }  
    else if (x < 0) { // warning: unnecessary parentheses around `if` condition
        y = -1;
    }  
    else {
        y = 0;
    }
    println!("The value of y is {}", y);
}

以上第二個(gè)判斷條件 else if (x < 0) 加了圓括號(hào),編譯運(yùn)行的時(shí)候會(huì)有相關(guān)警告。

運(yùn)行結(jié)果:

The value of y is 1

Rust 中的條件表達(dá)式必須是 bool 類型,例如下面的程序是錯(cuò)誤的:

fn main() {
    let number = 100;
    if number {   // error[E0308]: mismatched types,expected `bool`, found integer
        println!("true");
    }
}

雖然 C/C++ 語(yǔ)言中的條件表達(dá)式用整數(shù)表示,非 0 即真,但這個(gè)規(guī)則在很多注重代碼安全性的語(yǔ)言中是被禁止的。

在 Rust 中我們可以使用 if-else 結(jié)構(gòu)實(shí)現(xiàn)類似于三元條件運(yùn)算表達(dá)式 (A ? B : C) 的效果:

fn main() {
    let x = 100;
    let y = if x > 0 { 1 } else { -1 };
    println!("The value of y is {}", y);
}

運(yùn)行結(jié)果:

The value of y is 1

注意:兩個(gè)函數(shù)體表達(dá)式的類型必須一樣,且必須有一個(gè) else 及其后的表達(dá)式塊。

2.8 循環(huán)

Rust 除了靈活的條件語(yǔ)句以外,循環(huán)結(jié)構(gòu)的設(shè)計(jì)也十分成熟。

2.8.1 while 循環(huán)

while 循環(huán)是最典型的條件語(yǔ)句循環(huán):

fn main() {
    let mut number = 0;
    while number != 5 {
        println!("{}", number);
        number += 1;
    }
    println!("EXIT");
}

運(yùn)行結(jié)果:

0
1
2
3
4
EXIT

Rust 語(yǔ)言到目前還沒(méi)有 do-while 的用法,但是 do 被規(guī)定為保留字,也許以后的版本中會(huì)用到。

fn main() {
    let mut number = 0;
    do {
        println!("{}", number);
        number += 1;
    } while number != 5;
    println!("EXIT");
}

以上代碼編譯會(huì)報(bào)錯(cuò):error: expected expression, found reserved keyword do

在 C 語(yǔ)言中 for 循環(huán)使用三元語(yǔ)句控制循環(huán):

int i;
for (i = 0; i < 10; i++) {
    // 循環(huán)體
}

但是 Rust 中沒(méi)有這種用法,需要用 while 循環(huán)來(lái)代替:

let mut i = 0;
while i < 10 {
    // 循環(huán)體
    i += 1;
}

2.8.2 for 循環(huán)

for 循環(huán)是最常用的循環(huán)結(jié)構(gòu)。比如 for 循環(huán)遍歷數(shù)組:

fn main() {
    let a = [10, 20, 30, 40, 50];
    let mut index = 0;
    for value in a.iter() {
        println!("The value of a[{}] is {}", index, value);
        index += 1;
    }
}

運(yùn)行結(jié)果:

The value of a[0] is 10
The value of a[1] is 20
The value of a[2] is 30
The value of a[3] is 40
The value of a[4] is 50

這個(gè)程序中的 for 循環(huán)完成了對(duì)數(shù)組 a 的遍歷。a.iter() 代表 a 的迭代器(iterator),實(shí)際上,for 循環(huán)其實(shí)是可以通過(guò)下標(biāo)來(lái)訪問(wèn)數(shù)組的:

fn main() {
    let a = [10, 20, 30, 40, 50];
    for index in 0..5 {
        println!("The value of a[{}] is {}", index, a[index]);
    }
}

運(yùn)行結(jié)果和上面是一樣的。注意此處 0…5 這個(gè)范圍使用時(shí)包含了 0,卻未包含 5。

2.8.3 loop 循環(huán)

Rust 語(yǔ)言有原生的無(wú)限循環(huán)結(jié)構(gòu) —— loop:

fn main() {
    let s = ['L', 'O', 'O', 'P', 'E', 'R'];
    let mut i = 0;
    loop {
        let ch = s[i];
        if ch == 'E' {
            break;
        }
        println!("The value of s[{}] is {}", i, ch);
        i += 1;
    }
}

運(yùn)行結(jié)果:

The value of s[0] is L
The value of s[1] is O
The value of s[2] is O
The value of s[3] is P

loop 循環(huán)可以通過(guò) break 關(guān)鍵字類似于 return 一樣使整個(gè)循環(huán)退出并給予外部一個(gè)返回值。這是一個(gè)十分巧妙的設(shè)計(jì),因?yàn)?loop 這樣的循環(huán)常被用來(lái)當(dāng)作查找工具使用,如果找到了某個(gè)東西當(dāng)然要將這個(gè)結(jié)果交出去:

fn main() {
    let s = ['L', 'O', 'O', 'P', 'E', 'R'];
    let mut i = 0;
    let location = loop {
        let ch = s[i];
        if ch == 'E' {
            break i;
        }
        println!("The value of s[{}] is {}", i, ch);
        i += 1;
    };
    
    println!("The index of \'E\' is {}", location);
}

運(yùn)行結(jié)果:

The value of s[0] is L
The value of s[1] is O
The value of s[2] is O
The value of s[3] is P
The index of 'E' is 4

2.8.4 循環(huán)標(biāo)簽

如果存在嵌套循環(huán),breakcontinue 應(yīng)用于此時(shí)最內(nèi)層的循環(huán)。選擇在一個(gè)循環(huán)上指定一個(gè)循環(huán)標(biāo)簽(loop label),然后將標(biāo)簽與 breakcontinue 一起使用,使這些關(guān)鍵字應(yīng)用于已標(biāo)記的循環(huán)而不是最內(nèi)層的循環(huán)。

fn main() {
    let mut count = 0;
    'counting_up: loop {
        println!("count = {count}");
        let mut remaining = 10;

        loop {
            println!("remaining = {remaining}");
            if remaining == 9 {
                break;
            }
            if count == 2 {
                break 'counting_up;
            }
            remaining -= 1;
        }

        count += 1;
    }
    println!("End count = {count}");
}

外層循環(huán)有一個(gè)標(biāo)簽 counting_up,它將從 0 數(shù)到 2。沒(méi)有標(biāo)簽的內(nèi)部循環(huán)從 10 向下數(shù)到 9。第一個(gè)沒(méi)有指定標(biāo)簽的 break 將只退出內(nèi)層循環(huán)。break 'counting_up; 語(yǔ)句將退出外層循環(huán)。

運(yùn)行結(jié)果:

count = 0
remaining = 10
remaining = 9
count = 1
remaining = 10
remaining = 9
count = 2
remaining = 10
End count = 2

參考鏈接

  1. Rust 官方網(wǎng)站:https://www.rust-lang.org/zh-CN
  2. Rust 官方文檔:https://doc.rust-lang.org/
  3. Rust Play:https://play.rust-lang.org/

到了這里,關(guān)于Rust 程序設(shè)計(jì)語(yǔ)言學(xué)習(xí)——基礎(chǔ)語(yǔ)法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包