自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Rust 基礎(chǔ)系列 #7: 在 Rust 中使用循環(huán)

開(kāi)發(fā)
這是處理程序控制流的一種方法。另一種方法是使用循環(huán)。因此,讓我們?cè)诒疚闹锌纯囱h(huán)。

在 Rust 系列的 上一篇文章 中,我介紹了如何使用 if 和 else 關(guān)鍵字來(lái)處理 Rust 程序的控制流。

這是處理程序控制流的一種方法。另一種方法是使用循環(huán)。因此,讓我們?cè)诒疚闹锌纯囱h(huán)。

Rust 中可用的循環(huán)

Rust 編程語(yǔ)言有三種不同的循環(huán),基于你想要實(shí)現(xiàn)什么以及可用的內(nèi)容:

  • for
  • while
  • loop

我假設(shè)你對(duì) for 和 while 已經(jīng)很熟悉了,但 loop 對(duì)你來(lái)說(shuō)可能是個(gè)新概念。讓我們先從熟悉的概念開(kāi)始。

for 循環(huán)

for 循環(huán)主要用于迭代一種稱(chēng)為迭代器的東西。

這個(gè)迭代器可以從任何東西中創(chuàng)建,從數(shù)組、向量(很快就會(huì)介紹?。⒁幌盗兄?,或者任何自定義的東西。這里的可能性是無(wú)限的。

來(lái)看看 for 循環(huán)的語(yǔ)法。

for 迭代變量 in 迭代器 {
    <語(yǔ)句>;
}

其中的 迭代變量 在大多數(shù)其他編程語(yǔ)言教程中通常被稱(chēng)為 i ; )

迭代器 可以是任何東西,只要它能告訴下一個(gè)值是什么,如果有的話(huà)。

來(lái)通過(guò)一個(gè)程序來(lái)理解這個(gè)。

fn main() {
    let my_arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    println!("迭代數(shù)組");
    for element in my_arr {
        println!("{}", element);
    }
    println!("\n迭代一個(gè)真正的迭代器");
    for element in my_arr.iter() {
        println!("{}", element);
    }
    println!("\nPython 風(fēng)格的范圍");
    for element in 0..10 {
        println!("{}", element);
    }
}

這里,我聲明了一個(gè)數(shù)組,它包含從 0 到 9 的 10 個(gè)數(shù)字。在第 5 行的 for 循環(huán)中,我只是將這個(gè)數(shù)組指定為迭代器,Rust 會(huì)自動(dòng)處理對(duì)這個(gè)數(shù)組的所有元素的迭代。不需要花哨的 my_arr[i] 魔法。

但是,在第 10 行,我調(diào)用了 .iter() 函數(shù)。這是一個(gè)明確的提及,它基于 my_arr 的值來(lái)獲取一個(gè)迭代器。這個(gè)循環(huán)和第 5 行的循環(huán)之間唯一的區(qū)別是,這里你是通過(guò)在數(shù)組上調(diào)用 .iter() 函數(shù)來(lái)明確地調(diào)用它的。

在這個(gè)上下文環(huán)境中,在一個(gè)數(shù)據(jù)類(lèi)型上調(diào)用 .iter() 函數(shù)不是必須的。因?yàn)檫@是一個(gè)數(shù)組,是語(yǔ)言本身提供的一種數(shù)據(jù)類(lèi)型,Rust 已經(jīng)知道如何處理它了。但是你 需要 在自定義數(shù)據(jù)類(lèi)型中使用它。

最后,在第 15 行,我們有一個(gè)循環(huán),它循環(huán)遍歷一個(gè)范圍。嗯,差不多是這樣。如果你仔細(xì)看,這個(gè)范圍看起來(lái)很像切片 “類(lèi)型”。Rust 也知道這一點(diǎn),并且  你處理了迭代(哈哈,明白了嗎?)。

LCTT 譯注:此處的梗是,“為你處理了迭代” 的英文原文是 “handles iteration for you",其中的 “for” 與 “for 循環(huán)” 的 “for” 是同一個(gè)單詞。

輸出如下:

迭代數(shù)組
0
1
2
3
4
5
6
7
8
9

迭代一個(gè)真正的迭代器
0
1
2
3
4
5
6
7
8
9

Python 風(fēng)格的范圍
0
1
2
3
4
5
6
7
8
9

while 循環(huán)

while 循環(huán)可以被認(rèn)為是非常類(lèi)似于 if 條件語(yǔ)句。使用 if 語(yǔ)句,只要用戶(hù)提供的條件為 true,if 語(yǔ)句體中的代碼就會(huì)被執(zhí)行 一次。

但是,在 while 循環(huán)中,如果條件評(píng)估為 true,循環(huán)就會(huì)開(kāi)始循環(huán)循環(huán)體。只要條件繼續(xù)評(píng)估為 true,循環(huán)就會(huì)繼續(xù)迭代。

while 循環(huán)只有在循環(huán)完成當(dāng)前迭代中所有語(yǔ)句的執(zhí)行并且在檢查條件時(shí),它的結(jié)果為 false 時(shí)才會(huì)停止。

來(lái)看看 while 循環(huán)的語(yǔ)法...

while 條件 {
    <語(yǔ)句>;
}

看到了嗎?和 if 條件語(yǔ)句非常相似!不過(guò)沒(méi)有 else 塊 ; )

來(lái)看一個(gè)程序來(lái)更好地理解這個(gè)。

fn main() {
    let mut var = 0;
    while var < 3 {
        println!("{var}");
        var += 1;
    }
}

我有一個(gè)可變變量 var,它的初始值為 0。只要可變變量 var 中存儲(chǔ)的值小于 3,while 循環(huán)就會(huì)執(zhí)行。

在循環(huán)中,var 的值被打印出來(lái),然后它的值被增加 1。

這是上面代碼的輸出:

0
1
2

loop 循環(huán)

Rust 有一個(gè)無(wú)限循環(huán)。是的,一個(gè)沒(méi)有開(kāi)始條件和停止條件的循環(huán)。它只是一直循環(huán),直到永遠(yuǎn)。當(dāng)然,它有觸發(fā)器來(lái)停止代碼本身的循環(huán)執(zhí)行。

無(wú)限循環(huán)的語(yǔ)法如下:

loop {
    <語(yǔ)句>;
}

?? 這些循環(huán)主要用于 GUI 軟件,退出是一個(gè) 顯式 操作。

在我給你一個(gè)例子之前,因?yàn)檫@個(gè)循環(huán)非常特殊,讓我們先看看如何 退出 它 :p

要停止無(wú)限循環(huán)的執(zhí)行,需要在循環(huán)內(nèi)使用 break 關(guān)鍵字。

來(lái)看一個(gè)例子,只有 0 到 3 之間的整數(shù)(包括 0 和 3)才會(huì)被打印到程序輸出。

fn main() {
    let mut var = 0;
    loop {
        if var > 3 {
            break;
        }

        println!("{}", var);
        var += 1;
    }
}

看待這個(gè)特定的例子的最好方法是將它看作是一個(gè)增加了一堆沒(méi)有必要的東西的 while 循環(huán) ; )

你有一個(gè)可變變量 var,它的初始值為 0,它被用作迭代器。無(wú)限循環(huán)從一個(gè) if 條件開(kāi)始,如果 var 的值大于 3,break 關(guān)鍵字就會(huì)被執(zhí)行。后來(lái),就像 while 循環(huán)的前一個(gè)例子一樣,var 的值被打印到標(biāo)準(zhǔn)輸出,然后它的值被增加 1。

它的輸出如下:

0
1
2
3

標(biāo)記循環(huán)

假設(shè)有兩個(gè)無(wú)限循環(huán),一個(gè)嵌套在另一個(gè)中。由于某種原因,退出條件在最內(nèi)層循環(huán)中被檢查,但這個(gè)退出條件是為了退出最外層循環(huán)。

在這種情況下,標(biāo)記循環(huán)可能是有益的。

?? break 和 continue 關(guān)鍵字并不僅僅用于無(wú)限循環(huán)。它們可以用于 Rust 語(yǔ)言提供的所有三種循環(huán)。

接下來(lái)是如何標(biāo)記循環(huán)。

'標(biāo)記: loop {}

要告訴編譯器一個(gè)循環(huán)被標(biāo)記了,從一個(gè)單引號(hào)字符開(kāi)始,輸入它的標(biāo)簽,然后跟著一個(gè)冒號(hào)。然后,繼續(xù)使用你通常定義循環(huán)的方式。

當(dāng)你需要退出某個(gè)循環(huán)時(shí),只需像這樣指定循環(huán)標(biāo)簽:

break '標(biāo)記;

來(lái)看一個(gè)例子來(lái)更好地理解這個(gè)。

fn main() {
    let mut a = 0;
    let mut b = 0;

    'parent: loop {
        a += 1;
        loop {
            println!("a: {}, b: {}", a, b);
            b += 1;

            if a + b == 10 {
                println!("\n{} + {} = 10", a, b);
                break 'parent;
            }
        }
    }
}

這里,我使用兩個(gè)可變變量 a 和 b,它們的初始值都設(shè)置為 0。

然后,最外層的循環(huán)被標(biāo)記為 parent。parent 循環(huán)將變量 a 的值增加 1,并有一個(gè)內(nèi)部/子循環(huán)。

這個(gè)(在第 8 行的)子循環(huán)打印變量 a 和 b 的值。在這個(gè)循環(huán)內(nèi)部,變量 b 的值增加了 1。退出條件是 a + b == 10。這意味著只要變量 a 和 b 中存儲(chǔ)的值相加,結(jié)果為 10,parent 循環(huán)就會(huì)被打破。即使第 14 行的 break 條件“屬于”內(nèi)部循環(huán),它也會(huì)打破 parent 循環(huán)。

來(lái)看看程序的輸出。

a: 1, b: 0
a: 1, b: 1
a: 1, b: 2
a: 1, b: 3
a: 1, b: 4
a: 1, b: 5
a: 1, b: 6
a: 1, b: 7
a: 1, b: 8

1 + 9 = 10

就像從程序輸出中可以看出的那樣,循環(huán)在 a 和 b 分別具有值 1 和 9 時(shí)停止。

continue 關(guān)鍵字

如果你已經(jīng)在其他編程語(yǔ)言(如 C/C++/Java/Python)中使用過(guò)循環(huán),你可能已經(jīng)知道 continue 關(guān)鍵字的用法。

當(dāng) break 關(guān)鍵字用于完全停止循環(huán)執(zhí)行時(shí),continue 關(guān)鍵字用于“跳過(guò)”循環(huán)執(zhí)行的 當(dāng)前迭代 并從下一迭代開(kāi)始(如果條件允許)。

來(lái)看一個(gè)例子來(lái)理解 continue 關(guān)鍵字的工作原理。

fn main() {
    for i in 0..10 {
        if i % 2 == 0 {
            continue;
        }
        println!("{}", i)
    }
}

在上面的代碼中,我有一個(gè) for 循環(huán),它迭代了 0 到 9 之間的整數(shù)(包括 0 和 9)。一旦循環(huán)開(kāi)始,我就設(shè)置了一個(gè)條件檢查,看看這個(gè)數(shù)字是不是偶數(shù)。如果這個(gè)數(shù)字是偶數(shù),continue 關(guān)鍵字就會(huì)被執(zhí)行。

但是如果這個(gè)數(shù)字是奇數(shù),這個(gè)數(shù)字就會(huì)被打印到程序輸出。

來(lái)看看這個(gè)程序的輸出。

1
3
5
7
9

正如你所看到的,循環(huán)似乎一直在“進(jìn)行”,盡管 0 到 9 之間顯然有偶數(shù)。但是因?yàn)槲沂褂昧?nbsp;continue 關(guān)鍵字,當(dāng)遇到這個(gè)關(guān)鍵字時(shí),循環(huán)執(zhí)行就會(huì)停止。

這個(gè)循環(huán)跳過(guò)了它下面的任何東西,并繼續(xù)下一次迭代。這就是為什么偶數(shù)沒(méi)有被打印出來(lái),但是 0 到 9 之間的所有奇數(shù)都被打印到了程序輸出中。

總結(jié)

要總結(jié)這篇長(zhǎng)文,我演示了 3 種不同循環(huán)的用法:forwhile 和 loop。我還討論了兩個(gè)關(guān)鍵字,它們影響這些循環(huán)的控制流:break 和 continue。

我希望你現(xiàn)在能理解每個(gè)循環(huán)的適當(dāng)用例。如果你有任何問(wèn)題,請(qǐng)告訴我。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2023-05-04 07:33:39

Rust變量常量

2024-01-09 09:27:57

Rust編程泛型

2024-01-07 17:29:10

編程語(yǔ)言線(xiàn)程Rust

2023-05-29 16:25:59

Rust函數(shù)

2023-05-14 18:56:50

Rust數(shù)據(jù)類(lèi)型

2024-03-26 09:25:35

RustSerde重命名

2023-05-23 18:11:12

Rust數(shù)組元組

2023-06-23 14:15:09

Rust編程

2023-06-11 17:25:13

Rust條件語(yǔ)句

2024-09-06 11:34:15

RustAI語(yǔ)言

2023-04-10 18:03:18

Rust編程語(yǔ)言

2024-04-07 00:00:10

Rust枚舉C代碼

2021-07-07 21:40:46

Rust函數(shù)勸退

2024-01-05 17:41:36

Rust編程循環(huán)

2024-03-19 08:54:20

Rust語(yǔ)言內(nèi)存管理應(yīng)用程序開(kāi)發(fā)

2015-04-20 10:06:37

PHP Rust 創(chuàng)建PHP 擴(kuò)展

2021-05-27 05:27:22

流程控制Rust

2023-05-26 17:21:15

PythonRust

2023-07-12 14:13:03

BashLinux

2020-10-21 14:54:02

RustGolang開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)