無(wú)極游戲網(wǎng)廈門seo排名收費(fèi)
枚舉類型,簡(jiǎn)稱枚舉,允許列舉所有可能的值來(lái)定義一個(gè)類型。
1、定義枚舉:
枚舉類型:已知所有可能的值,并且所有值的出現(xiàn)是互斥的,即每次只能取一種可能的值,才使用枚舉類型。
示例:聲明一個(gè)枚舉
enum IpAddrKind{V4,V6,
}
使用IpAddrKind中的兩個(gè)變體來(lái)創(chuàng)建實(shí)例:
let four = IpAddrKind::V4;
let six = IpAddrKind::V6;
注:枚舉的變體全部處于其標(biāo)識(shí)符的命名空間內(nèi),并使用兩個(gè)冒號(hào)將標(biāo)識(shí)符和變體分隔開(kāi)。
枚舉允許直接將其相關(guān)聯(lián)的數(shù)據(jù)嵌入枚舉變體內(nèi),這樣就可以更簡(jiǎn)單的表達(dá)意思。示例:
enum IpAddr{V4(String),V6(String),
}
let home = IpAddr:V4(String::from("127.0.0.1"));
let loopback = IpAddr::V6(String::from("::1"));
可以直接將數(shù)據(jù)附加到枚舉的每個(gè)變體中,這樣就不需要額外的使用結(jié)構(gòu)體了。
使用枚舉還可以讓每個(gè)變體擁有不同類型和數(shù)量的關(guān)聯(lián)數(shù)據(jù)。
示例:
enum IpAddr{V4(u8,u8,u8,u8),V6(String),
}
let home = IpAddr::V4(127.0.0.1);
let loopback = IpAddr::V6(String::from("::1"));
2、Option枚舉:
在Rust中雖然沒(méi)有空值的概念,但是卻提供了一個(gè)擁有類似概念的枚舉,可以使用它來(lái)標(biāo)識(shí)一個(gè)值的無(wú)效或缺失。這個(gè)枚舉就是Option<T>
,它在標(biāo)準(zhǔn)庫(kù)中的定義如下:
enum Option<T>{Some(T),None,
}
這里的<T>
表示一種泛型,即可以指代任意類型的數(shù)據(jù)。
因?yàn)?code>Option<T>和T(T表示任意數(shù)據(jù)類型)
是不同的類型,因此編譯器不允許像使用普通值一樣去直接使用Option<T>
的值。
3、控制流運(yùn)算符match:
Rust中存在一個(gè)控制流運(yùn)算符:match,它允許將一個(gè)值與一系列的模式相比較,并根據(jù)匹配的模式執(zhí)行相應(yīng)的代碼。模式可以由字面量、變量名、通配符和其他組成。
示例:
enum Coin {Penny,Nickel,Dime,Quarter,
}
fn value_in_cents(coin:Coin) -> u32{match coin{Coin::Penny => 1,Coin::Nickel => 5,Coin::Dime => 10,Coin::Quarter => 25,}
}
使用match
進(jìn)行匹配時(shí),必須窮舉所有的可能,來(lái)確保代碼的合法性。
4、_
通配符:
當(dāng)不需要處理所有可能的值的時(shí)候,可以使用_
通配符去匹配其余值。
示例:
let some_u8_value = 0u8;
match some_u8_value{1 => println!("one"),3 => println!("three"),5 => println!("five"),_ => (),
}
這里的_
可以匹配任何值,將_
放在其他分支后面,可以幫助匹配所有沒(méi)有被顯式指定出來(lái)的情形。
5、簡(jiǎn)單控制流if let
if let
能夠用來(lái)處理只關(guān)心某一種匹配而忽略其他匹配的情況。
示例:
使用match進(jìn)行匹配:
let some_u8_value = Some(0u8);
match some_u8_value{Some(3) => println!("three"),_ => (),
}
使用if let
進(jìn)行改寫:
let some_u8_value = Some(0u8);
if let Some(3) = some_u8_value{println!("three"),
}