視頻地址
頭條地址:https://www.ixigua.com/i6775861706447913485
源碼地址
github地址:見擴展鏈接。
講解內容
1、忽略模式中的值(1)使用_忽略整個值例子:
<code>fn foo(_: i32, y: i32) { println!("This code only uses the y parameter: {}", y);}fn main() { foo(3, 4);}/<code>
說明:對函數中的參數使用佔位符,主要是在實現trait的時候使用(如不需要特徵指定函數中的某個參數)。
(2)使用_忽略部分值
<code>let numbers = (2, 4, 8, 16, 32);match numbers { (first, _, third, _, fifth) => { println!("Some numbers: {}, {}, {}", first, third, fifth) },}/<code>
(3)通過在名字前以一個下劃線開頭來忽略未使用的變量例子1:
<code>fn main() { let _x = 5; let y = 10;}/<code>
說明:上述代碼中,編譯時對未使用y警告,對未使用x不會警告。
只使用 _ 和使用以下劃線開頭的名稱有些微妙的不同:比如_x 仍會將值綁定到變量,而 _ 則完全不會綁定。
例子2:
<code>//會報錯,因為以下劃線開頭的變量仍然會綁定值let s = Some(String::from("Hello!"));if let Some(_s) = s { println!("found a string");}println!("{:?}", s);/<code>
例子3:
<code>//不會報錯,因為s的所有權不會移動到\\_中let s = Some(String::from("Hello!"));if let Some(_) = s { println!("found a string");}println!("{:?}", s);/<code>
(4)用..忽略剩餘值對於有多個部分的值,可以使用 .. 語法來只使用部分並忽略其它值例子1:
<code>fn main() { let numbers = (2, 4, 8, 16, 32); match numbers { (first, .., last) => { //自動匹配到第一個和最後一個值 println!("Some numbers: {}, {}", first, last); }, }}/<code>
例子2:
<code>//下面的例子錯誤,因為..匹配必須是無歧義的fn main() { let numbers = (2, 4, 8, 16, 32); match numbers { (.., second, ..) => { println!("Some numbers: {}", second) }, }}/<code>
閱讀更多 令狐一衝a 的文章