欧美日韩国产一区二区|qovd片|小明个人发布看看|小浪货你夹真紧水又多|老头把我添高潮了A片故|99热久久精品国产一区二区|久久久春色AV

從高級(jí)程序員的角度來(lái)看 rust編程入門實(shí)戰(zhàn)與進(jìn)階( 三 )

let var = if something { 1 } else { 2 };
這里的花括號(hào)是必需的 。

從高級(jí)程序員的角度來(lái)看 rust編程入門實(shí)戰(zhàn)與進(jìn)階

文章插圖
類型Rust的類型有兩種:基本數(shù)據(jù)類型(數(shù)字、str),結(jié)構(gòu)(String) 。
二者之間唯一的區(qū)別是,基本類型的初始化可以直接賦值 , 而復(fù)雜類型則需要某種構(gòu)造函數(shù) 。
堆與棧
我之前幾乎不需要考慮堆與棧的問(wèn)題 。(據(jù)我所知,JS中的對(duì)象都存儲(chǔ)在堆中 , 只有基本類型在棧中 。)
堆:
● 速度慢
● 比較大

● 非???br /> ● 比較小
基本類型和基本的結(jié)構(gòu)都存儲(chǔ)在棧中 。要在堆中存貯值,需要使用Box<T> 。另外,Vec<T> 也可以將值保存到堆中 。
如果你使用的內(nèi)存較多,或者需要在結(jié)構(gòu)中使用帶有值的enum,則可能需要使用堆 。
如果發(fā)生棧溢出 , 則說(shuō)明你使用了過(guò)多的棧內(nèi)存 。對(duì)于一些較大的值,應(yīng)該使用Box 。
常見(jiàn)的基本類型
數(shù)字:
● i8、i16、i32、i64、i128:有符號(hào)整數(shù),包括負(fù)數(shù) 。數(shù)字表示值的比特?cái)?shù) 。
● u8、u16、u32、u64、u128:無(wú)符號(hào)整數(shù),從零開(kāi)始 。它們的最大容量翻了一倍,因?yàn)橛幸粋€(gè)額外的比特可用(在有符號(hào)整數(shù)中用于表示符號(hào)) 。數(shù)字表示值的比特?cái)?shù) 。
● f32 和 f64:浮點(diǎn)數(shù) 。javascript 世界中常見(jiàn)的數(shù)字 。
字符串:
● str:簡(jiǎn)單的UTF-8 字符串(所有 Rust 字符串都是 UTF-8 。不能使用無(wú)效的 UTF-8 字符串,會(huì)引發(fā)異常或造成panic) 。通常用作指針(即 &str) 。
● String:一種更復(fù)雜的類型(嚴(yán)格來(lái)說(shuō)不是基本類型) , 存儲(chǔ)在堆中 。
數(shù)組:
● T :具有固定長(zhǎng)度的數(shù)組(如果使用 Option<T> 類型,則數(shù)組內(nèi)包含的元素?cái)?shù)量可以小于實(shí)際長(zhǎng)度) 。
元組
元組可用于存儲(chǔ)不同類型的多個(gè)值(從本質(zhì)上來(lái)說(shuō)就是可以容納不同類型且大小固定的數(shù)組) 。
與數(shù)組不同,元組可通過(guò)點(diǎn)(.)直接訪問(wèn),例如 tuple.0 表示獲取第一項(xiàng),而 tuples 沒(méi)有.len 之類的方法 。
let var = (1, "str");
有一個(gè)很有意思的小技巧,你可以通過(guò)(空元組)返回“void” 。既沒(méi)有 return 語(yǔ)句,也不會(huì)返回值的函數(shù)會(huì)返回 。
常見(jiàn)結(jié)構(gòu)
Option<T>
● 這是一個(gè)枚舉,值為Some(T) 或 None 。(我們稍后再討論enum,Rust中的枚舉與其他語(yǔ)言略有不同 。)
● 如果想獲取該值,你可以使用 match,就像使用其他枚舉一樣 , 或者使用 .unwrap (如果值為None,則會(huì)導(dǎo)致panic) 。
Result<T, E>
● 這個(gè)結(jié)構(gòu)與 Option 類似,但常用于處理錯(cuò)誤(通常由 IO 方法返回) 。
● 它的值是 Ok(T) 或 Err(E) 。
● 如果想獲取該值,你可以使用match 塊或 unwrap 。
● 為了方便使用,當(dāng)函數(shù)返回 Result<T, E> 時(shí),可以在返回值為 Result<T, E>(其中E必須為兼容的類型)的方法調(diào)用之后使用 ? 來(lái)返回錯(cuò)誤E(類似于使用.unwrap(),但當(dāng)函數(shù)出錯(cuò)時(shí)不會(huì)造成panic) 。
fn example -> Result<, Error> { // 一種錯(cuò)誤類型 。為了簡(jiǎn)便起見(jiàn),你可以使用String,或自定義enum 。 something_that_returns_result?; Ok() // returns empty Tuple}
Vec<T>
● 向量是可增長(zhǎng)的數(shù)組,存儲(chǔ)在堆上 。
● 向量支持 .push、.pop 等常用操作 。詳情參見(jiàn)Rust文檔 。
Box<T>
● 在堆上存儲(chǔ)T ??捎糜谠诮Y(jié)構(gòu)中使用enum , 或者用于釋放??臻g 。
定義結(jié)構(gòu)
結(jié)構(gòu)類似于對(duì)象 , 但它們的大小是靜態(tài)的 。

相關(guān)經(jīng)驗(yàn)推薦