概述:
在Rust 中,作為強(qiáng)類型語言,自然會(huì)獨(dú)立一塊內(nèi)容用作類型管理工作,而rust 中 為應(yīng)用領(lǐng)域的擴(kuò)展, 兼容了很多的數(shù)學(xué)計(jì)算方面的 內(nèi)容,加到了基本類型中,例如 復(fù)數(shù), 在有向圖和 矢量圖計(jì)算中的應(yīng)用,rust 通過自帶的類型設(shè)計(jì)避免了 程序員再開發(fā)的任務(wù)難度。
總的來說,rust 的數(shù)據(jù)類型分為兩類, 基本類型和 復(fù)合類型,這點(diǎn)和C++蠻像的。
接下來簡(jiǎn)單介紹一下 基本類型。然后進(jìn)一步介紹 語句和表達(dá)式、函數(shù)。
基本類型
- 數(shù)值類型
- 有符號(hào) 整形 (
i8
,i16
,i32
,i64
,isize
) - 無符號(hào) 整形(
i8
,i16
,i32
,i64
,isize
) - 浮點(diǎn) (
f32
,f64
) - 有理數(shù)
- 復(fù)數(shù)
- 有符號(hào) 整形 (
- 字符串
- 字符串 字面量 (指 字符串)
- 字符串 切片 (
&str
)
- 布爾類型
true
和false
- 字符類型 表示單個(gè) Unicode 字符,存儲(chǔ)為 4 個(gè)字節(jié)(這里和C++ 的 字符類型char 區(qū)分, char 只占一個(gè)字符)
- 單元類型 即
()
,其唯一的值也是()
- 在Rust中單元類型,和元組是不一樣的,雖然都是有括號(hào)。
- 具體來說元組是一種可以包含多個(gè)不同類型的值的數(shù)據(jù)結(jié)構(gòu),而單元類型是一種沒有任何值的類型。元組可以用來組織和傳遞多個(gè)值,而單元類型主要用于表示函數(shù)沒有返回值的情況。
-
元組可以是空元組,其中沒有任何元素用
()
表示。 和單元類型的區(qū)分在于所處位置。見下面代碼
fn return_unit() -> () {
// 函數(shù)返回單元類型 這里的 -> 之后的() 就代表單元類型。
}
fn main() {
let empty_tuple = ();
let unit_value = return_unit();
println!("{:?}", empty_tuple); // 輸出: ()
println!("{:?}", unit_value); // 輸出: ()
}
靜態(tài)語言的類型推導(dǎo)
初次接觸類型推導(dǎo)是在 Python中, 后來在JavaScript 中也遇到一些, 但是在動(dòng)態(tài)語言中推導(dǎo)類型,明顯是會(huì)拉低運(yùn)行速度的,特別是復(fù)合類型傳遞。
靜態(tài)語言 rust 通過編譯器,也實(shí)現(xiàn)了類型推導(dǎo),但是這個(gè)其實(shí)可以類比C++中的正則表達(dá)式, 其實(shí)是讓編譯器自己決定是什么類型,然后按照對(duì)應(yīng)的類型編寫成匯編代碼,鏈接成程序。
所以靜態(tài)語言的類型推導(dǎo),不是運(yùn)行時(shí)推導(dǎo),靜態(tài)語言的類型推導(dǎo),是編譯時(shí)推導(dǎo)。 當(dāng)然這可能導(dǎo)致編譯時(shí)間過長(zhǎng)的問題,這個(gè)還需要再在后續(xù)使用中實(shí)際體驗(yàn)后才能記錄。
類型標(biāo)注
當(dāng)然,作為強(qiáng)類型,也不一定要全部推導(dǎo),可以通過對(duì)變量進(jìn)行類型標(biāo)注的操作,完成對(duì)類型的顯式說明,通過這樣的方式就可以減小推導(dǎo)時(shí)間,特別是在復(fù)合類型中應(yīng)用這樣的方式。
let guess = "42".parse().expect("Not a number!");
Compiling playground v0.0.1 (/playground)
error[E0282]: type annotations needed
--> src/main.rs:4:5
|
4 | let guess = "42".parse().expect("Not a number!");
| ^^^^^
|
help: consider giving `guess` an explicit type
|
4 | let guess: /* Type */ = "42".parse().expect("Not a number!");
| ++++++++++++
For more information about this error, try `rustc --explain E0282`.
error: could not compile `playground` (bin "playground") due to previous error
先忽略 .parse().expect..
部分,這段代碼的目的是將字符串 "42"
進(jìn)行解析,而編譯器在這里無法推導(dǎo)出我們想要的類型:整數(shù)?浮點(diǎn)數(shù)?字符串?因此編譯器會(huì)報(bào)錯(cuò):文章來源:http://www.zghlxwxcb.cn/news/detail-519682.html
$ cargo build
Compiling no_type_annotations v0.1.0 (file:///projects/no_type_annotations)
error[E0282]: type annotations needed
--> src/main.rs:2:9
|
2 | let guess = "42".parse().expect("Not a number!");
| ^^^^^ consider giving `guess` a type
因此我們需要提供給編譯器更多的信息,例如給 guess
變量一個(gè)顯式的類型標(biāo)注:let guess: i32 = ...
或者 "42".parse::<i32>()
。文章來源地址http://www.zghlxwxcb.cn/news/detail-519682.html
到了這里,關(guān)于Rust 基礎(chǔ)入門 —— 基本類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!