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

Rust編程基礎之變量與可變性

開發(fā) 前端
在Rust語言中, 變量默認是不可改變的(immutable), 這是Rust提供給我們的眾多優(yōu)勢之一, 讓我們可以充分利用Rust提供的安全性和簡單并發(fā)性來編寫代碼。

1.Rust變量

在Rust語言中, 變量默認是不可改變的(immutable), 這是Rust提供給我們的眾多優(yōu)勢之一, 讓我們可以充分利用Rust提供的安全性和簡單并發(fā)性來編寫代碼。

當變量不可變時, 一旦值被綁定在一個名稱上, 就不能改變這個值。下面是一段代碼的例子:

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

這段代碼如果是其它高級語言, 看不出有什么問題, 定義了一個變量,先賦值1,然后打印輸出, 再將該值賦值2, 再打印該值的內容。

但如果你使用的是支持Rust開發(fā)語言的IDE, 在這段代碼中會給出一個錯誤標識, 將鼠標移到上面,會看到一段錯誤提示,如圖:

圖片圖片

錯誤含義就是不可多次為一個不可變的變量賦新值。

如果我們使用Rust自帶的編譯器進行編譯, Rust會很貼心的告訴我們錯誤在哪個位置, 錯誤的原因, 錯誤怎么糾正,如圖:

圖片圖片

在上圖的提示中, Rust編譯器建議我們想改變變量的值, 應該在let后面加上mut關鍵字, 這樣變量就可以被改變了。

修改代碼如下:

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

再次編譯, 可以看到已經正確打印了變量內容,如圖:

圖片圖片

2.Rust常量

類似于不可變變量, 常量(constants)是綁定到一個名稱的不允許改變的值, 不過常量和變量還是有一定的區(qū)別。

首先, 不允許對常量使用mut, 常量不僅默認不可變, 而且總是不可變。聲明常量使用const關鍵字而不是let, 并且必須注明值的類型。

常量可以在任何作用域中聲明,包括全局作用域, 這在一個值需要被很多部分的代碼用到時很有用。

最后一個區(qū)別是,常量只能被設置為常量表達式,而不可以是其它任何只能在運行時計算出的值。

以下是一個常量的聲明例子:

const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 *3;

常量的名稱是 THREE_HOURS_IN_SECONDS,它的值被設置為 60(一分鐘內的秒數)乘以 60(一小時內的分鐘數)再乘以 3(我們在這個程序中要計算的小時數)的結果。Rust 對常量的命名約定是在單詞之間使用全大寫加下劃線。編譯器能夠在編譯時計算一組有限的操作,這使我們可以選擇以更容易理解和驗證的方式寫出此值,而不是將此常量設置為值 10,800。

在聲明它的作用域之中,常量在整個程序生命周期中都有效,此屬性使得常量可以作為多處代碼使用的全局范圍的值,例如一個游戲中所有玩家可以獲取的最高分或者光速。

將遍布于應用程序中的硬編碼值聲明為常量,能幫助后來的代碼維護人員了解值的意圖。如果將來需要修改硬編碼值,也只需修改匯聚于一處的硬編碼值。

3.隱藏

在Rust中,我們可以定義一個與之前變量同名的新變量, 在這種情況下, 稱之為第一個變量被第二個隱藏(Shadowing)了, 這意味著當我們使用變量的名稱時, 編譯器將看到第二個變量。實際上,第二個變量“遮蔽”了第一個變量,此時任何使用該變量名的行為中都會視為是在使用第二個變量,直到第二個變量自己也被隱藏或第二個變量的作用域結束。可以用相同變量名稱來隱藏一個變量,以及重復使用let關鍵字來多次隱藏。

看一段下面的代碼:

fn main() {
    let x = 5;

    let x = x + 1;
    {
        // 進入隱藏作用域
        let x = x * 2;
        println!("The value of x in the inner scope is: {x}");
    }
    println!("The value of x is: {x}");
}

我們先在代碼下個斷點, 通過調試狀態(tài)觀察變量值的情況,如圖:

圖片圖片

從上圖中可以看到, 進入花括號作用域后, x 經過計算已經變成了12, 所以第一個打印的應該是12。

如果出了作用域會怎樣呢, 繼續(xù)單步走一下退出作用域,如圖:

圖片圖片

可以看到, 出了作用域之后, X的值又變成了6, 因此第二個打印語句的結果就是6。

因此最終輸出如下:

圖片圖片

隱藏與將變量標記為 mut 是有區(qū)別的。當不小心嘗試對變量重新賦值時,如果沒有使用 let 關鍵字,就會導致編譯時錯誤。通過使用 let,我們可以用這個值進行一些計算,不過計算完之后變量仍然是不可變的。

mut 與隱藏的另一個區(qū)別是,當再次使用 let 時,實際上創(chuàng)建了一個新變量,我們可以改變值的類型,并且復用這個名字。例如,假設程序請求用戶輸入空格字符來說明希望在文本之間顯示多少個空格,接下來我們想將輸入存儲成數字(多少個空格):

let spaces = " ";
let spaces = spaces.len();

第一個 spaces 變量是字符串類型,第二個 spaces 變量是數字類型。隱藏使我們不必使用不同的名字,如 spaces_str 和 spaces_num;相反,我們可以復用 spaces 這個更簡單的名字。然而,如果嘗試使用 mut,將會得到一個編譯時錯誤,如下所示:

let mut spaces = " ";
spaces = spaces.len();

錯誤提示如下:

圖片圖片

4.總結

在本篇文章中, 我們學到以下知識點:

  • Rust變量定義及可變性、不可變性的靈活應用。
  • Rust常量的基本作用域和命名規(guī)則。
  • Rust變量的隱藏屬性規(guī)則、原理和應用。
責任編輯:武曉燕 來源: 二進制空間安全
相關推薦

2021-08-26 09:01:35

內部Rust可變性

2024-07-05 10:47:15

2021-04-19 20:36:06

存儲Rust變量

2022-07-14 23:27:57

數據分析數據驅動可變數據

2023-06-27 08:19:11

2024-04-26 06:35:54

Rust&mutmu

2022-09-22 07:31:14

Java變量計算

2021-03-22 17:16:04

AI 數據人工智能

2024-04-12 12:14:39

Rust字符串代碼

2023-12-26 01:14:20

函數式編程死鎖

2022-02-22 15:27:46

數據結構容器算法

2024-01-15 07:15:05

函數式編程代碼

2023-10-20 08:18:17

Python數據類型

2023-05-04 07:33:39

Rust變量常量

2024-01-10 09:26:52

Rust所有權編程

2023-05-24 21:08:00

Linux發(fā)行版

2011-10-08 14:09:27

JavaScript

2020-10-22 11:15:47

Go語言變量

2021-09-29 10:00:07

Go語言基礎

2021-10-13 10:00:52

Go語言基礎
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美高清性xxxxhdvideosex | 一久久久 | 日韩av在线一区二区三区 | 韩国精品在线 | 国产91网站在线观看 | 日韩在线小视频 | 亚洲一区二区免费视频 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 精品无码久久久久国产 | 中文字幕在线观看一区 | 成人久久久久 | 国产不卡视频在线 | 欧美精| 欧美性生活网 | 国产免费视频在线 | 99re国产精品 | 中文精品视频 | 欧美精品一区二区三区在线 | 狠狠做深爱婷婷综合一区 | 久久久国产一区二区 | 日本一区二区三区在线观看 | 国产一区二区三区四区五区3d | 日本不卡免费新一二三区 | 二区视频 | 亚洲欧美第一视频 | 一级片在线观看 | 欧美video| 国产一区二区在线视频 | 精品自拍视频在线观看 | 中文字幕1区 | 高清人人天天夜夜曰狠狠狠狠 | www.成人.com | 国产成人免费 | 亚洲一区免费 | 91国语清晰打电话对白 | 国产做a爱片久久毛片 | 在线观看国产视频 | 成人在线视频免费观看 | 亚洲精品一区二区 | 91丨九色丨国产在线 | 久久精品91 |