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

Rust 基礎(chǔ)入門 —— 變量綁定與解構(gòu)

這篇具有很好參考價(jià)值的文章主要介紹了Rust 基礎(chǔ)入門 —— 變量綁定與解構(gòu)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

摸個(gè)筆記

  1. 首先討論的第一點(diǎn),就是對于傳統(tǒng)的開發(fā)者來說明:為什么要去用 這樣手動設(shè)定的方式設(shè)定變量的可行性。
    1. Course給出的解釋是——苦一苦開發(fā),樂一樂運(yùn)維。
    2. 好吧,讓我們理解,程序員的懶惰和貪婪是無止境的,我們想要一種類型自行推斷,但是性能提高、安全非常的方式。在未解決前,先權(quán)衡吧。

[[Rust 命名規(guī)范]]

變量命名

在命名方面,和其它語言沒有區(qū)別,不過當(dāng)給變量命名時(shí),需要遵循? Rust 命名規(guī)范

大致化用 駝峰命名法 和 蛇形命名法。

Rust 語言有一些關(guān)鍵字keywords),和其他語言一樣,這些關(guān)鍵字都是被保留給 Rust 語言使用的,因此,它們不能被用作變量或函數(shù)的名稱。在?附錄 A?中可找到關(guān)鍵字列表。

變量綁定

  1. 在rust 中,我們分為兩部分去探討變量和值。

    1. 值是rust 中存儲在內(nèi)存空間中的具體數(shù)字,
    2. 變量,不再是內(nèi)存地址的代稱,而是一個(gè)獨(dú)立內(nèi)容。它綁定對應(yīng)的內(nèi)存空間。因此,在Rust中就存在綁定和解綁的兩部分。
    3. 這樣就有一個(gè)問題,在解綁和綁定新內(nèi)存空間之后,原來的內(nèi)存對象怎么處理它?
    4. 以及另一個(gè)新問題:內(nèi)存對象綁定到新的變量對象時(shí),原有的變量對象怎么了?
  2. 概念 :所有權(quán)
    在Rust 中我們把變量賦值,改稱為變量綁定。 而在綁定這個(gè)概念被提出之后,就對應(yīng)的引入了所有權(quán)的概念。 即 —— 內(nèi)存對象是哪個(gè)變量所有的。

  3. 更近一步的補(bǔ)充需要再學(xué)習(xí)。

變量可變性

在這一節(jié)中,我們聊一下 為什么 Rust 喜歡不可變的變量。

Rust 的關(guān)注點(diǎn):高并發(fā)。以及高并發(fā)天然帶來的 資源使用安全問題。

在多線程編程中,我們常常需要對一些共用資源做出操作,而在大型項(xiàng)目中,多人編程你不能保證他人會按照你的預(yù)期操作你所使用的資源, 這種悲觀保護(hù)情緒,在開發(fā)中給我們帶來了很多額外的容錯(cuò)流程代碼。

Rust想做的事情,就是通過折磨程序員,來剔除懶狗和low的小工。默認(rèn)不可變的變量要求你在使用時(shí)對他投注更大的精力去關(guān)注。

而當(dāng)你需要修改變量時(shí),額外的mut 關(guān)鍵字 提醒了每一個(gè)使用者應(yīng)當(dāng)注意安全使用。

選擇可變還是不可變,更多的還是取決于你的使用場景,例如不可變可以帶來安全性,但是喪失了靈活性和性能(如果你要改變,就要重新創(chuàng)建一個(gè)新的變量,這里涉及到內(nèi)存對象的再分配)。而可變變量最大的好處就是使用上的靈活性和性能上的提升。

例如,在使用大型數(shù)據(jù)結(jié)構(gòu)或者熱點(diǎn)代碼路徑(被大量頻繁調(diào)用)的情形下,在同一內(nèi)存位置更新實(shí)例可能比復(fù)制并返回新分配的實(shí)例要更快。使用較小的數(shù)據(jù)結(jié)構(gòu)時(shí),通常創(chuàng)建新的實(shí)例并以更具函數(shù)式的風(fēng)格來編寫程序,可能會更容易理解,所以值得以較低的性能開銷來確保代碼清晰。

使用下劃線開頭 忽略未使用的變量 和 函數(shù)

正如我們在 介紹 cargo 時(shí)所說的,Rust 有著一個(gè)優(yōu)秀又嚴(yán)格的 編譯器 加管理器,而因?yàn)閲?yán)格,Rust對未使用的函數(shù)和變量都會檢測挑出來。告警 告訴你: 這些內(nèi)容都是未使用的,請注意。

而我們在編碼過程中的時(shí)候,常常處于調(diào)試和測試的過程中,而這時(shí),我們看到滿屏的黃標(biāo)是很影響心情的。

Rust 提供了編碼規(guī)范解決這個(gè)問題, _當(dāng)我們使用下劃線這個(gè)關(guān)鍵詞的時(shí)候,Rust 認(rèn)為,對應(yīng)的內(nèi)容(變量和函數(shù))是內(nèi)部使用的,不需要向外界提供,因此不再告警未使用了。
比如下面的代碼:
![[Pasted image 20230615165557.png]]
這里上面的編譯運(yùn)行就是告警情況。而下面紅框的就是修改之后清爽的編譯執(zhí)行情況。
附贈測試代碼

fn _test_error_1() {
    println!("test_error_1()");
    let mut x: usize = 0;
    x -= 1;
    println!("{}", x);
}
// use std::mem;
fn _test_type_1() {
    let a = 11;
    let b = 0xFFi16;
    println!("{} {}", b, std::mem::size_of_val(&b));
    // let b = b:i8;                                                // 類型轉(zhuǎn)換 不行
    // println!("{} {}", b, std::mem::size_of_val(&b));
    // let b = 0xFFi8;                                              // 隱式強(qiáng)轉(zhuǎn) 不行
    // println!("{} {}", b, std::mem::size_of_val(&b));
    let b = 0xFF_i32; // 類型標(biāo)注 只能用在值標(biāo)定,不能使用變量
    println!("{} {}", b, std::mem::size_of_val(&b));
    let b = 30i128;
    println!("{} {}", a, std::mem::size_of_val(&b));
    let c = 32_i32;
    println!("{} {}", b, std::mem::size_of_val(&c));
}

fn _test_add() {
    let num = _add(_add(1, 2), _add(3, 4));
    println!("{} ", num);
}

fn test_let_info() {
    let zry;
    zry = 1;
    println!("{}", zry);
}

fn main() {
    test_let_info();
}

fn _add(i: i32, j: i32) -> i32 {
    // return i+j;
    i + j
}

變量解構(gòu)

變量解構(gòu)實(shí)際上講的是let 這個(gè)關(guān)鍵字 所提供的一個(gè) 綁定特性。

let 可以對復(fù)雜變量進(jìn)行拆解,然后匹配對應(yīng)的內(nèi)存對象進(jìn)行綁定

所謂復(fù)雜變量是指由基本變量組合而來的 變量對象, 比如 元組,

fn test_let_jiegou() {
    let (z,r,y,mut reach): (char,char,char,i32) = ('a', 'a', 'c', 100);
    println!("{} {} {} {}", z,r,y,reach);

    reach = 111;
    
    assert_eq!(111,reach);
}

fn main() {
    test_let_jiegou();
}

在這個(gè)元組中,我們由多個(gè)對象,多個(gè)類型,但是我們可以一次聲明定義完成。

有點(diǎn),c++中 int a = b = c =0; 那味了。當(dāng)然比他更強(qiáng)的是跨類型聲明定義。

更進(jìn)一步的解構(gòu) —— 解構(gòu)式賦值。

來自 Rust 1.59 版本之后更進(jìn)一步的 變量綁定 。—— 左值 可以使用 元組、切片、結(jié)構(gòu)體模式。


struct Struct {
    e: i32
}

fn test_let_jiegou() {
    let (z,r,y,mut reach): (char,char,char,i32) = ('a', 'a', 'c', 100);
    println!("{} {} {} {}", z,r,y,reach);

    reach = 111;

    assert_eq!(111,reach);

    // 解構(gòu)式賦值
    let (a,b,c,d,e  );
    (a,b) = (11,22);
    [c,..,d,_] = [1,2,3,4,5,6,7,8,9];
    Struct {e,..} = Struct {e: 10};

    println!("{} {} {} {} {}   ", a,b,c,d,e );
}

fn main() {
    test_let_jiegou();
}

執(zhí)行結(jié)果入下:
![[Pasted image 20230615214954.png]]

在我們使用 形如 ? ? [c,..,d,_]的格式時(shí), 最后的 _實(shí)際是代稱,當(dāng)我們使用占位之后,我們的值也對應(yīng)的修改。? ? [c,..,d,_,_] 這時(shí),我們的d 值變更為7。 這里于最后兩位處的值相同。

變量和常量之間的差異

在 Rust 中 常量值的定義 直觀感受 有點(diǎn)類似于 C++ 中的 宏定義的。
在c++ 中:

#define MAX_POINTS = 100000;

在Rust 中

const MAX_POINTS: u32 =100_000;

變量的值不能更改可能讓你想起其他另一個(gè)很多語言都有的編程概念:常量(constant)。與不可變變量一樣,常量也是綁定到一個(gè)常量名且不允許更改的值,但是常量和變量之間存在一些差異:

  • 常量不允許使用?mut。常量不僅僅默認(rèn)不可變,而且自始至終不可變,因?yàn)槌A吭诰幾g完成后,已經(jīng)確定它的值。
  • 常量使用?const?關(guān)鍵字而不是?let?關(guān)鍵字來聲明,并且值的類型必須標(biāo)注。

我們將在之后 介紹,因此現(xiàn)在暫時(shí)無需關(guān)心細(xì)節(jié)。

下面是一個(gè)常量聲明的例子,其常量名為?MAX_POINTS,值設(shè)置為?100,000。(Rust 常量的命名約定是全部字母都使用大寫,并使用下劃線分隔單詞,另外對數(shù)字字面量可插入下劃線以提高可讀性):

常量可以在任意作用域內(nèi)聲明,包括全局作用域,在聲明的作用域內(nèi),常量在程序運(yùn)行的整個(gè)過程中都有效。對于需要在多處代碼共享一個(gè)不可變的值時(shí)非常有用,例如游戲中允許玩家賺取的最大點(diǎn)數(shù)或光速。

在實(shí)際使用中,最好將程序中用到的硬編碼值都聲明為常量,對于代碼后續(xù)的維護(hù)有莫大的幫助。如果將來需要更改硬編碼的值,你也只需要在代碼中更改一處即可。

總結(jié):

  1. rust 中使用了兩個(gè)不同的關(guān)鍵字 區(qū)分常量和變量, 不同于C++ ,const 和 let 具備同等的權(quán)重,const 不必作為修飾詞限定類型聲明。

變量遮蔽

所謂變量遮蔽,是指同名的變量在重定義時(shí),后面的變量會頂替掉前面的變量。

這種頂替是從內(nèi)存空間和內(nèi)存綁定層次實(shí)現(xiàn)的,因此,我們明確第二點(diǎn),rust 的類型是 經(jīng)過包裝的類型,內(nèi)部包括了 釋放和創(chuàng)建申請的相關(guān)操作。

在 Rust 中,drop 是一個(gè)特殊的 trait,用于定義當(dāng)一個(gè)值離開作用域時(shí)應(yīng)該執(zhí)行的代碼。這個(gè) trait 可以用來實(shí)現(xiàn)資源管理,例如釋放內(nèi)存或關(guān)閉文件句柄。當(dāng)一個(gè)值被銷毀時(shí),Rust 會自動調(diào)用其 drop 方法,以確保資源被正確釋放。

所以rust 中的值都是封裝之后的類型么?內(nèi)部包含對應(yīng)的trait ,保證釋放合理

是的,Rust 中的值都是封裝之后的類型,內(nèi)部包含對應(yīng)的 trait,以確保資源被正確釋放。這種方式可以避免內(nèi)存泄漏和資源泄漏等問題,提高程序的可靠性和安全性。

所以let 重定義一個(gè)變量后,原來的同名變量將會調(diào)用對應(yīng)的drop 方式 釋放變量和值兩者的空間嗎?

是的,當(dāng)使用 let 重新定義一個(gè)變量時(shí),原來的同名變量將會被銷毀,其對應(yīng)的值也會被釋放。Rust 會自動調(diào)用其 drop 方法,以確保資源被正確釋放。這種方式可以避免內(nèi)存泄漏和資源泄漏等問題,提高程序的可靠性和安全性。文章來源地址http://www.zghlxwxcb.cn/news/detail-492744.html

到了這里,關(guān)于Rust 基礎(chǔ)入門 —— 變量綁定與解構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • python教程 入門學(xué)習(xí)筆記 第3天 編程基礎(chǔ)常識 代碼注釋 變量與常量

    編程基礎(chǔ)常識 一、注釋 1、對代碼的說明與解釋,它不會被編譯執(zhí)行,也不會顯示在編譯結(jié)果中 2、注釋分為:單行注釋和多行注釋 3、用#號開始,例如:#這是我的第一個(gè)python程序 4、注釋可以寫在單獨(dú)一行,也可以寫在一句代碼后面 5、不想執(zhí)行編譯,又不能刪除的代碼,可

    2024年02月14日
    瀏覽(94)
  • Rust 筆記:Rust 語言中的常量與變量

    Rust 筆記 Rust 語言中的常量與變量 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 郵箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/130875912 【介紹】:本文介紹 Rust 語言中的常量與變量。 上一節(jié):《 上一節(jié)標(biāo)題 》 | 下一節(jié):《

    2024年02月06日
    瀏覽(21)
  • Rust 學(xué)習(xí)筆記 - 變量聲明與使用

    任何一門編程語言幾乎都脫離不了:變量、基本類型、函數(shù)、注釋、循環(huán)、條件判斷,這是一門編程語言的語法基礎(chǔ),只有當(dāng)掌握這些基礎(chǔ)語法及概念才能更好的學(xué)習(xí) Rust。 Rust 是一種強(qiáng)類型語言,但在聲明變量時(shí),不總是需要顯式聲明類型,這是因?yàn)?Rust 的編譯器有類型推

    2024年02月19日
    瀏覽(26)
  • Rust-模式解構(gòu)

    Rust-模式解構(gòu)

    首先,我們看看使用match的最簡單的示例: 有些時(shí)候我們不想把每種情況一一列出,可以用一個(gè)下劃線來表達(dá)“除了列出來的那些之外的其他情況”: 下劃線還能用在模式匹配的各種地方,用來表示一個(gè)占位符,雖然匹配到了但是忽略它的值的情況: 下劃線表示省略一個(gè)元

    2024年01月17日
    瀏覽(21)
  • Rust---解構(gòu)(Destructuring)

    模式匹配是一種通用的編程概念,用于檢查數(shù)據(jù)結(jié)構(gòu)是否符合特定模式,并根據(jù)匹配結(jié)果執(zhí)行相應(yīng)的操作。而 解構(gòu)是模式匹配的一種應(yīng)用 ,用于從復(fù)雜的數(shù)據(jù)結(jié)構(gòu)中提取出需要的部分。 在 Rust 中,可以使用模式匹配和解構(gòu)來處理各種數(shù)據(jù)結(jié)構(gòu),包括元組、數(shù)組、結(jié)構(gòu)體、枚

    2024年04月10日
    瀏覽(21)
  • 【Rust 基礎(chǔ)篇】Rust可變靜態(tài)變量:全局狀態(tài)的可變性管理

    Rust是一種以安全性和高效性著稱的系統(tǒng)級編程語言,其設(shè)計(jì)哲學(xué)是在不損失性能的前提下,保障代碼的內(nèi)存安全和線程安全。為了實(shí)現(xiàn)這一目標(biāo),Rust引入了\\\"所有權(quán)系統(tǒng)\\\"、\\\"借用檢查器\\\"等特性,有效地避免了常見的內(nèi)存安全問題。然而,有時(shí)候我們需要在程序的整個(gè)生命周期

    2024年02月15日
    瀏覽(20)
  • 【Rust】001-基礎(chǔ)語法:變量聲明及數(shù)據(jù)類型

    【Rust】001-基礎(chǔ)語法:變量聲明及數(shù)據(jù)類型

    “一切能用 Rust 重寫的項(xiàng)目都將或者正在用 Rust 重寫” Rust 入門與實(shí)踐:https://juejin.cn/book/7269676791348854839?utm_source=course_list 代碼演示 執(zhí)行結(jié)果 依賴 Cargo.toxml 代碼 執(zhí)行命令 根目錄執(zhí)行 整型標(biāo)量類型 只要記得最低從 8 開始,到 128 結(jié)束(當(dāng)然,正常情況下我們最多用到 64,

    2024年02月10日
    瀏覽(31)
  • 大二暑期實(shí)習(xí)記錄(一):處理組件綁定數(shù)據(jù)錯(cuò)誤(數(shù)組解構(gòu),map()方法)

    大二暑期實(shí)習(xí)記錄(一):處理組件綁定數(shù)據(jù)錯(cuò)誤(數(shù)組解構(gòu),map()方法)

    好家伙,搬磚 ? 今天在做組件遷移(從一個(gè)舊平臺遷移到一個(gè)新平臺)的時(shí)候,發(fā)現(xiàn)了一些小小的問題: ? 在穿梭框組件中,使用\\\" 節(jié)點(diǎn)配置 \\\"方法添加數(shù)據(jù)的時(shí)候,左測數(shù)據(jù)選擇框直接消失了 這里我們猜測一下,大概是數(shù)據(jù)處理出了問題 此處,我們使用 \\\"數(shù)據(jù)綁定\\\" 綁定數(shù)據(jù)方法: ? ?定

    2024年02月15日
    瀏覽(18)
  • rust 初識基礎(chǔ): 變量、數(shù)據(jù)類型、函數(shù)、所有權(quán)、枚舉

    rust 初識基礎(chǔ): 變量、數(shù)據(jù)類型、函數(shù)、所有權(quán)、枚舉

    了解到 rust 和 WebAssembly 的結(jié)合使用,可以構(gòu)建前端應(yīng)用,而且性能也比較好。初步學(xué)習(xí)使用 rust 是預(yù)編譯靜態(tài)類型語言。 官網(wǎng)下載 rust-CN , 大致了解下為什么選擇:高性能、可靠性、生產(chǎn)力。 打開控制臺啊,執(zhí)行安裝 (mac 系統(tǒng),windwos 或其他系統(tǒng)查看官網(wǎng)) 安裝成功時(shí),會打

    2024年02月07日
    瀏覽(28)
  • 【ChatGPT輔助學(xué)Rust | 基礎(chǔ)系列 | 基礎(chǔ)語法】變量,數(shù)據(jù)類型,運(yùn)算符,控制流

    【ChatGPT輔助學(xué)Rust | 基礎(chǔ)系列 | 基礎(chǔ)語法】變量,數(shù)據(jù)類型,運(yùn)算符,控制流

    本章節(jié)將詳細(xì)介紹Rust的基礎(chǔ)語法,包括變量,數(shù)據(jù)類型,運(yùn)算符,以及控制流。每個(gè)部分都將提供詳細(xì)的解釋和代碼示例,以便于理解和學(xué)習(xí)。 在編程語言中,變量是一種基本的概念,它們是用來存儲數(shù)據(jù)的。在Rust中,變量的特性和其他語言有所不同。 在Rust中,變量的定

    2024年02月14日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包