成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā)
這是處理程序控制流的一種方法。另一種方法是使用循環(huán)。因此,讓我們在本文中看看循環(huán)。

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

這是處理程序控制流的一種方法。另一種方法是使用循環(huán)。因此,讓我們在本文中看看循環(huán)。

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

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

  • for
  • while
  • loop

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

for 循環(huán)

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

這個迭代器可以從任何東西中創(chuàng)建,從數(shù)組、向量(很快就會介紹!)、一系列值,或者任何自定義的東西。這里的可能性是無限的。

來看看 for 循環(huán)的語法。

for 迭代變量 in 迭代器 {
    <語句>;
}

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

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

來通過一個程序來理解這個。

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迭代一個真正的迭代器");
    for element in my_arr.iter() {
        println!("{}", element);
    }
    println!("\nPython 風(fēng)格的范圍");
    for element in 0..10 {
        println!("{}", element);
    }
}

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

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

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

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

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

輸出如下:

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

迭代一個真正的迭代器
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)可以被認為是非常類似于 if 條件語句。使用 if 語句,只要用戶提供的條件為 trueif 語句體中的代碼就會被執(zhí)行 一次

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

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

來看看 while 循環(huán)的語法...

while 條件 {
    <語句>;
}

看到了嗎?和 if 條件語句非常相似!不過沒有 else 塊 ; )

來看一個程序來更好地理解這個。

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

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

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

這是上面代碼的輸出:

0
1
2

loop 循環(huán)

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

無限循環(huán)的語法如下:

loop {
    <語句>;
}

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

在我給你一個例子之前,因為這個循環(huán)非常特殊,讓我們先看看如何 退出 它 :p

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

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

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

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

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

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

它的輸出如下:

0
1
2
3

標記循環(huán)

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

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

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

接下來是如何標記循環(huán)。

'標記: loop {}

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

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

break '標記;

來看一個例子來更好地理解這個。

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;
            }
        }
    }
}

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

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

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

來看看程序的輸出。

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 時停止。

continue 關(guān)鍵字

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

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

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

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

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

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

來看看這個程序的輸出。

1
3
5
7
9

正如你所看到的,循環(huán)似乎一直在“進行”,盡管 0 到 9 之間顯然有偶數(shù)。但是因為我使用了 continue 關(guān)鍵字,當(dāng)遇到這個關(guān)鍵字時,循環(huán)執(zhí)行就會停止。

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

總結(jié)

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

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

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

2023-05-04 07:33:39

Rust變量常量

2023-05-29 16:25:59

Rust函數(shù)

2024-01-09 09:27:57

Rust編程泛型

2024-01-07 17:29:10

編程語言線程Rust

2023-05-14 18:56:50

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

2024-03-26 09:25:35

RustSerde重命名

2023-06-23 14:15:09

Rust編程

2023-05-23 18:11:12

Rust數(shù)組元組

2023-06-11 17:25:13

Rust條件語句

2024-09-06 11:34:15

RustAI語言

2023-04-10 18:03:18

Rust編程語言

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語言內(nèi)存管理應(yīng)用程序開發(fā)

2015-04-20 10:06:37

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

2021-05-27 05:27:22

流程控制Rust

2023-05-26 17:21:15

PythonRust

2023-07-12 14:13:03

BashLinux

2023-07-20 15:37:50

Bash數(shù)組
點贊
收藏

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

主站蜘蛛池模板: 中文字幕av亚洲精品一部二部 | 欧美成人精品一区 | 天天躁日日躁xxxxaaaa | 国产成人av一区二区三区 | 人人人人人爽 | 欧美成年人 | 亚洲一区二区三区久久 | 在线小视频 | 日韩成人免费视频 | 久久久久免费观看 | 久久噜噜噜精品国产亚洲综合 | 91在线网 | 日韩欧美网 | 欧美精品综合 | 日韩免费视频 | 国产一区91精品张津瑜 | 99精品视频一区二区三区 | 国产成人a亚洲精品 | 久久久久国产视频 | 国产91丝袜在线熟 | 欧美色专区 | 日韩欧美国产一区二区三区 | wwww.8888久久爱站网 | 亚洲精品一区二区在线观看 | 日韩中文字幕在线观看 | 精品国产91 | 色综合久久88色综合天天 | 国产自产c区| 国产亚洲一区二区三区在线 | 欧美日韩综合视频 | 欧美最猛黑人xxxx黑人 | 日韩综合网| 欧美视频免费在线 | 国产精品美女久久久久久久久久久 | 亚洲成人一区二区 | 午夜影院在线播放 | 欧美精品一区二区三区四区 在线 | 国产成人精品一区二 | www国产成人免费观看视频,深夜成人网 | 91免费入口 | 韩国精品在线观看 |