Rust中不可變變量與const的區(qū)別詳解
什么是變量?
如果你初次學(xué)習(xí)編程語言,變量會(huì)是一個(gè)比較抽象的概念。
以Rust語言來說,聲明一個(gè)變量就是申請(qǐng)一塊內(nèi)存,內(nèi)存的大小由變量的類型決定,類型我們會(huì)在后面的課程介紹。
let a = "abc";
我們使用let
關(guān)鍵字聲明一個(gè)變量a,同時(shí)把abc
存放到變量里面。
此時(shí),我們可以說變量中存儲(chǔ)了abc
,也可以說這塊內(nèi)存中存儲(chǔ)了abc
。
具體怎么來理解呢?
內(nèi)存就像這個(gè)雞蛋收納盒, 我們?yōu)槊恳粋€(gè)蛋格編碼(這個(gè)編碼就相當(dāng)于內(nèi)存地址)。聲明一個(gè)變量a,相當(dāng)于找到一個(gè)空格把它叫做a,同時(shí)把雞蛋放到這個(gè)空格里面。我們可以把任何一個(gè)空格叫做a,它不過是為蛋格的編碼起了一個(gè)別名。
下面這個(gè)圖就描述了我們這段代碼實(shí)際做的事情,把0xBA0F0140到0xBA0F0152這段內(nèi)存叫做變量a,并且存儲(chǔ)了字符串a(chǎn)bc。
let a = "abc"; a = "efg"; // X 此處報(bào)錯(cuò)
我們把在聲明變量a時(shí)賦值了“abc”,就不能再修改這個(gè)變量了。這是Rust的一個(gè)語言特性,如果我們后續(xù)可能會(huì)修改變量a的內(nèi)容,就需要在聲明時(shí)添加上mut
關(guān)鍵字,如下:
let mut a = "abc"; a = "efg"; // √
Rust引入mut關(guān)鍵字的有何優(yōu)勢(shì)?
- 不可變變量可以防止意外修改,從而避免數(shù)據(jù)競(jìng)爭(zhēng)和內(nèi)存錯(cuò)誤。例如,如果一個(gè)變量是不可變的,則無法在多個(gè)線程中同時(shí)修改它,從而避免數(shù)據(jù)競(jìng)爭(zhēng)。
- 不可變變量可以使代碼更加簡(jiǎn)潔易讀。例如,如果一個(gè)變量是不可變的,則可以明確地表明該變量的值在代碼塊內(nèi)不會(huì)改變,從而使代碼的邏輯更加清晰。
- 不可變變量可以幫助編譯器進(jìn)行優(yōu)化。例如,如果一個(gè)變量是不可變的,則編譯器可以知道該變量的值在代碼塊內(nèi)不會(huì)改變,從而可以進(jìn)行一些優(yōu)化,例如消除不必要的計(jì)算。
- 不可變變量是函數(shù)式編程的重要概念。函數(shù)式編程鼓勵(lì)使用不可變變量和純函數(shù),從而使代碼更加易于理解和測(cè)試。
Rust中不可變變量與const有何區(qū)別?
const MAX_SIZE: usize = 100;
const
關(guān)鍵字用于定義常量。常量與不可變變量類似,但常量在編譯期就確定了值,不能在運(yùn)行時(shí)改變。不可變變量直到運(yùn)行期來能確定下來。
常量具有以下優(yōu)點(diǎn):
- 性能: 常量可以幫助編譯器進(jìn)行優(yōu)化。
- 可讀性: 常量可以使代碼更加易讀。
如何銷毀一個(gè)變量?
聲明變量對(duì)應(yīng)著申請(qǐng)內(nèi)存,銷毀變量也就是釋放對(duì)應(yīng)的內(nèi)存。
Rust中釋放內(nèi)存有非常復(fù)雜的機(jī)制,主要分為兩類:
- 釋放棧內(nèi)存,離開作用域即使放作用域內(nèi)的變量。
- 釋放堆內(nèi)存,通常就是由智能指針來釋放內(nèi)存。也是模擬棧內(nèi)存的釋放模式,即在離開作用域時(shí)判斷是否需要釋放內(nèi)存。
內(nèi)存的釋放是Rust的核心內(nèi)容,涉及到所有權(quán)、借用、和生命周期以及智能指針。這些也是Rust的難點(diǎn),勸退了眾多想嘗試Rust的開發(fā)者。后面我們會(huì)詳細(xì)介紹這一部分。不過接下來我們需要先鋪墊Rust基礎(chǔ)內(nèi)容,以后再探秘這些難點(diǎn)。
總結(jié):
- let關(guān)鍵字用于聲明變量,此外它還用于模式匹配。
- mut關(guān)鍵字用于聲明可變變量。
- const關(guān)鍵字用于聲明常量。。
以上就是Rust中不可變變量與const的區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于Rust不可變量與const區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用rust實(shí)現(xiàn)一個(gè)命令行工具
這篇文章主要為大家詳細(xì)介紹了如何使用?Rust?和?clap?4.4.0?創(chuàng)建一個(gè)命令行工具?my_dev_tool,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下2023-12-12Rust中使用Serde對(duì)json數(shù)據(jù)進(jìn)行反序列化
JSON作為目前流行的數(shù)據(jù)格式之一,被大家廣泛使用,在日常的開發(fā)實(shí)踐中,將JSON數(shù)據(jù)反序列化為對(duì)應(yīng)的類型具有重要的意義,在Rust中,Serde幾乎成了JSON數(shù)據(jù)解析的事實(shí)標(biāo)準(zhǔn),本文將給大家介紹Rust中使用Serde對(duì)json數(shù)據(jù)進(jìn)行反序列化,需要的朋友可以參考下2024-01-01C和Java沒那么香了,Serverless時(shí)代Rust即將稱王?
Serverless Computing,即”無服務(wù)器計(jì)算”,其實(shí)這一概念在剛剛提出的時(shí)候并沒有獲得太多的關(guān)注,直到2014年AWS Lambda這一里程碑式的產(chǎn)品出現(xiàn)。Serverless算是正式走進(jìn)了云計(jì)算的舞臺(tái)2021-06-06rust標(biāo)準(zhǔn)庫std::env環(huán)境相關(guān)的常量
在本章節(jié)中, 我們探討了Rust處理命令行參數(shù)的常見的兩種方式和處理環(huán)境變量的兩種常見方式, 拋開Rust的語法, 實(shí)際上在命令行參數(shù)的處理方式上, 與其它語言大同小異, 可能影響我們習(xí)慣的也就只剩下語法,本文介紹rust標(biāo)準(zhǔn)庫std::env的相關(guān)知識(shí),感興趣的朋友一起看看吧2024-03-03