Rust中變量的示例分析

這篇文章給大家分享的是有關(guān)Rust中變量的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)專注于海滄企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站制作。海滄網(wǎng)站建設(shè)公司,為海滄等地區(qū)提供建站服務(wù)。全流程按需定制制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

01 變量和綁定

變量指定了某存儲單元(Memory Location)的名稱,該存儲單元會存儲特定類型的值。

Rust 是靜態(tài)類型語言,不能在運行期改變變量類型。

和你熟悉的大部分編程語言不一樣,Rust 中變量一般不叫聲明,而叫做綁定(這是從函數(shù)式語言中借鑒的,使用關(guān)鍵字 let 綁定),那有什么區(qū)別呢?

在 Go 語言中一般有下面幾種聲明變量的方式:

var age = 10 var age int var age int = 10 age := 10 // 只能在函數(shù)內(nèi)部使用 // 可以分組 var (  age = 10   birthday = "01-01" )

Go 中聲明變量,可以不指定類型(會進行類型推導(dǎo)),也可以不給初始值(會有默認初始值)。

而 Rust 中,形式比較少,主要有兩種:

let age = 10; let age: i32 = 10;

和 Go 一樣,大部分時候,Rust 也能夠推導(dǎo)出類型。在顯示指定類型時,需要加上 :。關(guān)于類型,后續(xù)講解。

那為什么 Rust 中變量創(chuàng)建一般叫做綁定呢?

1)Rust 和 C 一樣,變量創(chuàng)建后必須初始化后才能使用(未使用的變量會警告)。以下代碼編譯報錯:

fn main() {     let age: i32;     println!("age is {}", age); } // error[E0381]: borrow of possibly-uninitialized variable: `age`

2)Rust 中,通過 let 關(guān)鍵字,在標識符(如變量 age)與值(如 10)之間建立起一種關(guān)聯(lián)關(guān)系。表明所有權(quán)關(guān)系。也就是說這塊內(nèi)存現(xiàn)在屬于 age  了。

熟悉 JS 的朋友,應(yīng)該對 var 和 let 很親切,不過兩者的區(qū)別和 Go 中的 var 與 Rust 的 let 區(qū)別不一樣。

02 可變性

第一次看到下面的代碼報錯,你肯定特別的驚訝:

fn main() {     let age = 10;     println!("age is {}", age);     age = 11;     println!("age is {}", age); } // error[E0384]: cannot assign twice to immutable variable `age`

沒錯,Rust 中的變量默認是不可變的(好吧,變量不可變。。。但又不是常量)。這也是 Rust 中內(nèi)存管理很重要的一個特性。

如果我想變量可變,怎么辦?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)建不可變變量,只有真的需要時,才使用可變變量。

03 隱藏(shadow)

因為變量默認不可變,Rust 中還存在這樣「詭異」的情況。下面代碼一切正常:

fn main() {     let age = 10;     println!("age is {}", age);     let age = 11;     println!("age is {}", age); }

在 Go 中,肯定報重復(fù)聲明。

這種「重復(fù)」創(chuàng)建同名變量的語法,Rust 中叫做隱藏(Shadow)。也就是說上次創(chuàng)建的被這次創(chuàng)建的隱藏了。具體有什么用呢?

比如類似這樣的代碼,在 Go 中還是比較常見的:

ageStr := req.FormValue("age") age, err := strconv.Atoi(ageStr)

也就是說,同樣的數(shù)值,因為類型不同,需要用兩個不同名稱的變量表示。但 Rust 中可以這樣:

fn main() {     let age = "10";     let age = age.parse::<i32>().unwrap();     println!("age is {}", age); }

不過這種語法有好處也有弊端。當涉及到作用域時,要特別注意隱藏的問題。這和 Go 中的簡短聲明(:=)的「坑」很像。類似下面這樣的代碼,最后的 age  依然是 10:(實際中的代碼一般不會這么明顯)

fn main() {     let age = 10;     {         let age = "abc";         println!("age is {}", age);     }     println!("age is {}", age); } // age is abc // age is 10

可見,隱藏只會其所屬作用域內(nèi)生效。

感謝各位的閱讀!關(guān)于“Rust中變量的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

本文名稱:Rust中變量的示例分析
轉(zhuǎn)載注明:http://bm7419.com/article0/igidio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、軟件開發(fā)、網(wǎng)站導(dǎo)航、網(wǎng)站維護、域名注冊、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作