語言/Rust
數(shù)據(jù)類型 - Rust 程序設(shè)計語言 簡體中文版
數(shù)據(jù)類型
- rust 聲明的變量一定屬于某一數(shù)據(jù)類型
- 兩類子集 標(biāo)量 和 復(fù)合
- rust 是靜態(tài)類型語言
標(biāo)量類型
- 標(biāo)量(scalar) 類型代表一個單獨的值,Rust有四種基本的標(biāo)量類型,整形,浮點型,布爾型,字符串型
整形
- 整形是么有小數(shù)部分的數(shù)字
PS. 整型溢出
- 比方說有一個
u8
,它可以存放從零到255
的值墩瞳。那么當(dāng)你將其修改為256
時會發(fā)生什么呢呢铆?這被稱為 “整型溢出”(“integer overflow” ),關(guān)于這一行為 Rust 有一些有趣的規(guī)則弥咪。當(dāng)在 debug 模式編譯時络它,Rust 檢查這類問題并使程序 panic咖城,這個術(shù)語被 Rust 用來表明程序因錯誤而退出茬腿。第九章 “panic!
與不可恢復(fù)的錯誤” 部分會詳細介紹 panic。 - 在 release 構(gòu)建中宜雀,Rust 不檢測溢出切平,相反會進行一種被稱為二進制補碼包裝(two’s complement wrapping)的操作。簡而言之辐董,
256
變成0
悴品,257
變成1
,依此類推郎哭。依賴整型溢出被認為是一種錯誤他匪,即便可能出現(xiàn)這種行為。如果你確實需要這種行為夸研,標(biāo)準(zhǔn)庫中有一個類型顯式提供此功能邦蜜,[Wrapping](https://rust-lang.budshome.com/std/num/struct.Wrapping.html)
。
浮點型
-
f32
和f64
兩種 - 32-bit 64-bit
- 默認是
float64
fn mian(){
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
數(shù)值運算
pub fn math() {
// 加法
let sum = 1 + 2;
// 減法
let difference = 95.3 - 93 as f64;
// 乘法
let product = 4 * 30;
// 除法
let quotient = 56.7 / 32.2;
// 取余
let remainder = 43 % 5;
println!(
"sum: {},difference: {},product: {},quotient: {},remainder: {}",
sum, difference, product, quotient, remainder
)
}
布爾型
true
false
字符類型
- 在rust中 雙引號和單引號表達的值是不一樣的
-
''
表示的是char
值""
表示的是string
的地址
復(fù)合類型
復(fù)合類型可以將多個值組成一個類型
- 元組(tuple)
- 數(shù)組(array)
元組類型
元組是一個將多個其他類型的值組合進一個復(fù)合類型的主要方式,
- 元組長度固定:一旦聲明,其長度不會增大或縮小
fn main(){
let tup: (i32,f64,u8) = (500,6.4,1)
}
tup
變量綁定在一個元組上
- 在元組中取值可以使用匹配(pattern matching)來結(jié)構(gòu)(destruction)元組值
fn main(){
let tup = (500,6.4,1);
let (x,y,z) = tup;
println!("value x:",x);
}
- 元組類似于js中數(shù)組的引用方式
.0
fn main(){
let tup = (500,6.4,1);
println!("value x:",tup.0);
}
數(shù)組類型
- 與元組不同,數(shù)組內(nèi)的每個元素的類型必須相同
- 數(shù)組的長度也是固定的,一旦聲明,長度不能增加或者減少
fn main(){
let arr = [0,1,2,3]
}
- 在rust中有一種類型是vector類型
- vector類型是標(biāo)準(zhǔn)庫提供的 允許 增加和減少長度的類似數(shù)組的集合類型,當(dāng)不確定使用 數(shù)組 還是 vector的時候 應(yīng)當(dāng)使用 vector
// 手動定義數(shù)組類型和長度
fn main(){
let arr: [i32;5] = [0,1,2,3,4]
}
// 手動定義一個每一個元素都相同的數(shù)組
fn main(){
let arr = [3;5]
}