Rust學習 列舉和模式匹配

2022-09-14 13:18:10 字數 1468 閱讀 3060

一、列舉(enums)

rust中列舉由成員(variants)組成

列舉替代結構體優勢:

1. 每個成員可以處理不同型別和數量的資料

結構體與列舉相似點:

1. 都可以使用impl定義方法

2. 方法體都使用self來獲取呼叫方法的值

rust沒有空值(即null),但rust擁有乙個可以編碼存在或不存在概念的列舉(option):

enum option

options列舉很有用,所以已內建在prelude中無需顯示引入作用域。它的成員也不需要通過option::字首來使用,可直接使用some和none。即使如此,成員依舊是成員。

若使用none而不是some,則需要顯示宣告option的型別,即傳入具體t的型別,因為編譯器只通過none無法推斷some成員儲存值的型別。

在對 option進行 t 的運算之前必須將其轉換為 t。

通常這能幫助我們捕獲到空值最常見的問題之一:假設某值不為空但實際上為空的情況。

使用option優點:

不再擔心會錯誤的假設乙個非空值,會讓你對**更加有信心。

二、控制流運算子(match)

與if表示式區別:if表示式必須返回乙個bool值,而match中可以返回任意型別值。

乙個match分支有兩個部分:

1. 乙個模式

2. 一些**

繫結值的模式

enum usstate

enum coin

fn value_in_cents(coin: coin) -> u8 !", state);

25},}}

呼叫 value_in_cents(coin::quarter(usstate: :alaska))即可訪問到值alaska。

2.匹配option

乙個在 option上使用 match 表示式的函式:

fn plus_one(x: option) -> option

}let five = some(5);

let six = plus_one(five);

let none = plus_one(none);

將 match 與列舉相結合在很多場景中都是有用的。

rust中的匹配是窮盡的(exhaustive):必須窮舉到最後的可能性來使**有效。

3.萬用字元()

rust提供乙個模式用於不想列舉出所有可能值的場景。

」「 模式會匹配所有的值,通過將其放置於其他分支之後,_ 會匹配所有之前沒有指定的可能的值。

然而,match 在只關心僅乙個分支的場景中顯得囉嗦了,所以rust提供了 " if let "。

三、簡潔控制流(if let)

if let 獲取獲取通過等號分隔的乙個模式和乙個表示式。

使用if let 會失去 match 強制要求的窮盡性檢查。

所以使用match 還是 if let 需要去權衡。

if let 可以包含乙個else

rust前哨站 Rust學習資源和路線

rust學習資源和路線 學習資源 堪稱rust的 the book 是目前最權威的rust系統教程,入門必讀。例項化的講解方法,通過乙個個可實際執行的例子去介紹rust的特性和用法,有的時候,是最好的老師。rust語言的faq,收集了社群中常見的問題的回答,有問題時不妨先在這裡看看,或者通讀一遍,一...

shell之匹配模式和擴充套件匹配模式

首先說一下什麼是匹配模式,然後再介紹擴充套件匹配模式。匹配模式這個概念就算不知道,但是也都會使用這個功能找到匹配的檔案。例如 ls ab 找到所有以ab開頭的檔案。這就是利用了 可以匹配任意字串,包括空串。匹配模式是man bash中的pattern matching,星號的含義在上面講了。用來匹配...

Scala學習筆記 樣本類和模式匹配

1.樣本類 在申明的類前面加上乙個case修飾符,帶有這種修飾符的類被稱為樣本類 case class 被申明為樣本類的類的特點 1.會新增和類名一致的工廠方法 2.樣本類引數列表中的所有引數隱式獲得了val字首,因此它被當做字段維護 3.編譯器被這個樣本類新增了tostring hashcode ...