AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

我們一起聊聊 Rust 變量,你學會了嗎?

來源: 責編: 時間:2023-10-31 16:46:23 342觀看
導讀Rust 是一門強調安全、并發、高效的系統編程語言。無 GC 實現內存安全機制、無數據競爭的并發機制、無運行時開銷的抽象機制,是 Rust 獨特的優越特性。 它聲稱解決了傳統 C 語言和 C++語言幾十年來飽受責難的內存安全

Rust 是一門強調安全、并發、高效的系統編程語言。無 GC 實現內存安全機制、無數據競爭的并發機制、無運行時開銷的抽象機制,是 Rust 獨特的優越特性。 它聲稱解決了傳統 C 語言和 C++語言幾十年來飽受責難的內存安全問題,同時還保持了很高的運行效率、很深的底層控制、很廣的應用范圍, 在系統編程領域具有強勁的競爭力和廣闊的應用前景。S1B28資訊網——每日最新資訊28at.com

在 Rust 筆記(三)中,講了復核類型,本文就認識一下 Rust 中的變量。S1B28資訊網——每日最新資訊28at.com

可變 & 不可變

Rust 默認支持類型推導,在編譯器能夠推導類型的情況下,變量類型一般可以省略,但常量(const)和靜態變量(static)必須聲明類型。S1B28資訊網——每日最新資訊28at.com

圖片圖片S1B28資訊網——每日最新資訊28at.com

let a: &str = "一個不可變變量";const B: &str = "一個常量";static C: &str = "一個靜態變量";

變量默認是不可變的。如果需要讓變量具有可變性,必須為變量添加 mut 關鍵字。默認變量不可變是一個很重要的特性,它符合最小權限原則(Principle of Least Privilege),有助于我們寫出健壯且正確的代碼。當你使用 mut 卻沒有修改變量,Rust 編譯期會友好地報警,提示你移除不必要的 mut。S1B28資訊網——每日最新資訊28at.com

let mut x = 10; // 聲明一個可變的整型變量x = 20; // 可以修改 x 的值

當使用 mut 關鍵字聲明一個引用時,該引用就可以被修改所指向的變量,例如:S1B28資訊網——每日最新資訊28at.com

let mut s = String::from("hello");let r = &mut s; // 聲明一個可變的字符串引用r.push_str(" world!"); // 可以修改 s 的值

在其他大多數語言中,要么只支持申明可變的變量,要么只支持申明不可變的變量,但是 Rust 就不一樣了,兩者我都要,既要靈活性又要安全性。還有一個很大的優點,那就是運行性能上的提升,因為將本身無需改變的變量聲明為不可變在運行期會避免一些多余的 runtime 檢查。S1B28資訊網——每日最新資訊28at.com

選擇可變還是不可變,更多的還是取決于你的使用場景,S1B28資訊網——每日最新資訊28at.com

  • 不可變: 有安全性,但是喪失了靈活性和性能
  • 可變變量:最大的好處就是使用上的靈活性和性能上的提升

使用下劃線開頭忽略未使用的變量

在 Rust 中創建了一個變量卻不在任何地方使用它,Rust 會給你一個警告,因為這可能會是個 BUG。S1B28資訊網——每日最新資訊28at.com

圖片圖片S1B28資訊網——每日最新資訊28at.com

但是有時創建一個不會被使用的變量是有用的,比如你正在設計原型或剛剛開始一個項目。這時你希望告訴 Rust 不要警告未使用的變量,為此可以用下劃線作為變量名的開頭:S1B28資訊網——每日最新資訊28at.com

圖片圖片S1B28資訊網——每日最新資訊28at.com

變量綁定

在其他語言中,比如 JS,我們使用 var a = "Hello World"。意思是將 "Hello World" 賦值給變量 a。在 Rust 中,let a = "Hello World",意思和 JS 中一樣,但是這個過程起了有一個名字:變量綁定。S1B28資訊網——每日最新資訊28at.com

其實本質上是一回事,賦值 === 綁定,但是 Rust 存在“所有權”這一特性,所以綁定的含義更清晰準確。綁定就是把這個對象綁定給一個變量,讓這個變量成為它的主人。S1B28資訊網——每日最新資訊28at.com

變量解構 & 解構賦值

let 表達式不僅僅用于變量的綁定,還能進行復雜變量的解構:從一個相對復雜的變量中,匹配出該變量的一部分內容:S1B28資訊網——每日最新資訊28at.com

let (a, mut b): (bool, bool) = (true, false);// a = true,不可變; b = false,可變println!("a = {:?}, b = {:?}", a, b);

也可以進行變量的解構賦值:S1B28資訊網——每日最新資訊28at.com

let (a, b, c, d, e);(a, b) = (1, 2);

變量遮蔽

Rust 允許對申明的變量再次聲明,也就是允許申明相同的變量,后面的變量就會遮蔽前端的變量。S1B28資訊網——每日最新資訊28at.com

let x: i32 = 1;let x: i32 = 2;let x: i32 = x +1;println!("x: {}", x);

這和 mut 變量的使用是不同的,第二個 let 生成了完全不同的新變量,兩個變量只是恰好擁有同樣的名稱,涉及一次內存對象的再分配 ,而 mut 聲明的變量,可以修改同一個內存地址上的值,并不會發生內存對象的再分配,性能要更好。S1B28資訊網——每日最新資訊28at.com

變量命名

在命名方面,和其它語言沒有區別,不過當給變量命名時,需要遵循 Rust 命名規范。詳情可看RFC 430S1B28資訊網——每日最新資訊28at.com

  • type-level 的構造 Rust 傾向于使用駝峰命名法,value-level 的構造使用蛇形命名法。
  • 特殊命名:名稱應該使用動詞,而不是形容詞或者名詞。
  • 類型轉換要遵守 as_,to_,into_ 命名慣例(C-CONV)。
  • 讀訪問器(Getter)的名稱遵循 Rust 的命名規范(C-GETTER)。
  • 一個集合上的方法,如果返回迭代器,需遵循命名規則:iter,iter_mut,into_iter (C-ITER)。
  • 迭代器的類型應該與產生它的方法名相匹配(C-ITER-TY)。
  • Cargo Feature 的名稱不應該包含占位詞(C-FEATURE)。
  • 命名要使用一致性的詞序(C-WORD-ORDER)

變量和常量之間的差異

有變量就有常量。常量也是綁定到一個常量名且不允許更改的值,但是常量和變量之間存在一些差異:S1B28資訊網——每日最新資訊28at.com

  • 常量不允許使用 mut。常量不僅僅默認不可變,而且自始至終不可變,因為常量在編譯完成后,已經確定它的值。
  • 常量使用 const 關鍵字而不是 let 關鍵字來聲明,并且值的類型必須標注。
let a: &str = "一個不可變變量";const B: &str = "一個常量";

常量可以在任意作用域內聲明(包括全局作用域),在聲明的作用域內,常量在運行的整個過程中都有效。對于需要在多處代碼共享一個不可變的值時非常有用。S1B28資訊網——每日最新資訊28at.com

參考

  • https://zhuanlan.zhihu.com/p/615270800
  • https://time.geekbang.org/column/article/411632
  • https://www.runoob.com/rust/rust-function.html
  • https://zhuanlan.zhihu.com/p/366756163
  • https://course.rs/practice/naming.html

本文鏈接:http://www.tebozhan.com/showinfo-26-16138-0.html我們一起聊聊 Rust 變量,你學會了嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: WorkBox 之底層邏輯Service Worker

下一篇: 告別硬編碼,SpringBoot實現動態增刪啟停定時任務

標簽:
  • 熱門焦點
  • 6月安卓手機性價比榜:Note 12 Turbo斷層式碾壓

    6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產品也出現了歷史低價,那么各個價位段的產品性價比
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業用途。(幾小時前,swyy發現它已從LLaMA 2更名為Lla
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業觀察編 | 肖海林今年以來,威士忌市場開始出現了降溫跡象,越來越多不斷暴漲的網紅威士忌也開始悄然回歸市場理性。近日,LVMH集團旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • AI芯片初創公司Tenstorrent獲三星和現代1億美元投資

    Tenstorrent是一家由芯片行業資深人士Jim Keller領導的加拿大初創公司,專注于開發人工智能芯片,該公司周三表示,已經從現代汽車集團和三星投資基金等
  • onebot M24巧系列一體機采用輕薄機身設計,現已在各平臺開售

    onebot M24 巧系列一體機目前已在線上線下各平臺同步開售。onebot M24 巧系列采用一體化輕薄機身設計,最薄處為 10.15mm,擁有寶石紅、午夜藍、石墨綠、雅致
Top