十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
這篇文章給大家分享的是有關(guān)Rust中變量的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
創(chuàng)新互聯(lián)專(zhuān)注于海滄企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站制作。海滄網(wǎng)站建設(shè)公司,為海滄等地區(qū)提供建站服務(wù)。全流程按需定制制作,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
變量指定了某存儲(chǔ)單元(Memory Location)的名稱(chēng),該存儲(chǔ)單元會(huì)存儲(chǔ)特定類(lèi)型的值。
Rust 是靜態(tài)類(lèi)型語(yǔ)言,不能在運(yùn)行期改變變量類(lèi)型。
和你熟悉的大部分編程語(yǔ)言不一樣,Rust 中變量一般不叫聲明,而叫做綁定(這是從函數(shù)式語(yǔ)言中借鑒的,使用關(guān)鍵字 let 綁定),那有什么區(qū)別呢?
在 Go 語(yǔ)言中一般有下面幾種聲明變量的方式:
var age = 10 var age int var age int = 10 age := 10 // 只能在函數(shù)內(nèi)部使用 // 可以分組 var ( age = 10 birthday = "01-01" )
Go 中聲明變量,可以不指定類(lèi)型(會(huì)進(jìn)行類(lèi)型推導(dǎo)),也可以不給初始值(會(huì)有默認(rèn)初始值)。
而 Rust 中,形式比較少,主要有兩種:
let age = 10; let age: i32 = 10;
和 Go 一樣,大部分時(shí)候,Rust 也能夠推導(dǎo)出類(lèi)型。在顯示指定類(lèi)型時(shí),需要加上 :。關(guān)于類(lèi)型,后續(xù)講解。
那為什么 Rust 中變量創(chuàng)建一般叫做綁定呢?
1)Rust 和 C 一樣,變量創(chuàng)建后必須初始化后才能使用(未使用的變量會(huì)警告)。以下代碼編譯報(bào)錯(cuò):
fn main() { let age: i32; println!("age is {}", age); } // error[E0381]: borrow of possibly-uninitialized variable: `age`
2)Rust 中,通過(guò) let 關(guān)鍵字,在標(biāo)識(shí)符(如變量 age)與值(如 10)之間建立起一種關(guān)聯(lián)關(guān)系。表明所有權(quán)關(guān)系。也就是說(shuō)這塊內(nèi)存現(xiàn)在屬于 age 了。
熟悉 JS 的朋友,應(yīng)該對(duì) var 和 let 很親切,不過(guò)兩者的區(qū)別和 Go 中的 var 與 Rust 的 let 區(qū)別不一樣。
第一次看到下面的代碼報(bào)錯(cuò),你肯定特別的驚訝:
fn main() { let age = 10; println!("age is {}", age); age = 11; println!("age is {}", age); } // error[E0384]: cannot assign twice to immutable variable `age`
沒(méi)錯(cuò),Rust 中的變量默認(rèn)是不可變的(好吧,變量不可變。。。但又不是常量)。這也是 Rust 中內(nèi)存管理很重要的一個(gè)特性。
如果我想變量可變,怎么辦?Rust 提供了關(guān)鍵字 mut,這叫做可變綁定:
fn main() { let mut age = 10; println!("age is {}", age); age = 11; println!("age is {}", age); }
通常,我們應(yīng)該優(yōu)先創(chuàng)建不可變變量,只有真的需要時(shí),才使用可變變量。
因?yàn)樽兞磕J(rèn)不可變,Rust 中還存在這樣「詭異」的情況。下面代碼一切正常:
fn main() { let age = 10; println!("age is {}", age); let age = 11; println!("age is {}", age); }
在 Go 中,肯定報(bào)重復(fù)聲明。
這種「重復(fù)」創(chuàng)建同名變量的語(yǔ)法,Rust 中叫做隱藏(Shadow)。也就是說(shuō)上次創(chuàng)建的被這次創(chuàng)建的隱藏了。具體有什么用呢?
比如類(lèi)似這樣的代碼,在 Go 中還是比較常見(jiàn)的:
ageStr := req.FormValue("age") age, err := strconv.Atoi(ageStr)
也就是說(shuō),同樣的數(shù)值,因?yàn)轭?lèi)型不同,需要用兩個(gè)不同名稱(chēng)的變量表示。但 Rust 中可以這樣:
fn main() { let age = "10"; let age = age.parse::().unwrap(); println!("age is {}", age); }
不過(guò)這種語(yǔ)法有好處也有弊端。當(dāng)涉及到作用域時(shí),要特別注意隱藏的問(wèn)題。這和 Go 中的簡(jiǎn)短聲明(:=)的「坑」很像。類(lèi)似下面這樣的代碼,最后的 age 依然是 10:(實(shí)際中的代碼一般不會(huì)這么明顯)
fn main() { let age = 10; { let age = "abc"; println!("age is {}", age); } println!("age is {}", age); } // age is abc // age is 10
可見(jiàn),隱藏只會(huì)其所屬作用域內(nèi)生效。
感謝各位的閱讀!關(guān)于“Rust中變量的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!