rust複習筆記7

2021-09-25 04:09:51 字數 2093 閱讀 4327

近幾年工作中大量使用erlang開發,除了天然支援分布式外,erlang的模式匹配最值得稱道。其他語言golang,scala也提供模式匹配,總覺得表達不夠豐富,用起來也彆扭,當然有可能是與自己對這兩門語言本身理解不深有關。直到遇到rust,才找回那種自由的感覺。模式是 rust 中特殊的語法,它用來匹配型別中的結構,無論型別是簡單還是複雜。結合使用模式和match表示式以及其他結構可以提供更多對程式控制流的支配權。模式由如下一些內容組合而成:

乙個與if let結構類似的是while let條件迴圈,它允許只要模式匹配就一直進行while迴圈。

現在我們見過了很多使用模式的方式了,不過模式在每個使用它的地方並不以相同的方式工作;在一些地方,模式必須是 irrefutable 的,意味著他們必須匹配所提供的任何值。在另一些情況,他們則可以是 refutable 的。

let語句、 函式引數和for迴圈只能接受不可反駁的模式,因為通過不匹配的值程式無法進行有意義的工作。if letwhile let表示式被限制為只能接受可反駁的模式,因為根據定義他們意在處理可能的失敗:條件表示式的功能就是根據成功或失敗執行不同的操作。

match表示式中,可以使用|語法匹配多個模式,它代表(or)的意思。

...語法允許你匹配乙個閉區間範圍內的值。

也可以使用模式來解構結構體、列舉、元組和引用,以便使用這些值的不同部分。

有一些簡單的方法可以忽略模式中全部或部分值:使用_模式(我們已經見過了),在另乙個模式中使用_模式,使用乙個以下劃線開始的名稱,或者使用..忽略所剩部分的值。

對於有多個部分的值,可以使用..語法來只使用部分並忽略其它值,同時避免不得不每乙個忽略值列出下劃線。

匹配守衛(match guard)是乙個指定與match分支模式之後的額外if條件,它也必須被滿足才能選擇此分支。

at 運算子(@)允許我們在建立乙個存放值的變數的同時測試其值是否匹配模式。

四類可以在不安全 rust 中進行而不能用於安全 rust 的操作:

與引用和智慧型指標的區別在於,記住裸指標

常量與不可變靜態變數可能看起來很類似,不過乙個微妙的區別是靜態變數中的值有乙個固定的記憶體位址。使用這個值總是會訪問相同的位址。另一方面,常量則允許在任何被用到的時候複製其資料。

生命週期高階特徵:

rust 的生命週期子型別(lifetime subtyping)功能,這是乙個指定乙個生命週期不會短於另乙個的方法。在宣告生命週期引數的尖括號中,可以照常宣告乙個生命週期'a,並通過語法'b: 'a宣告乙個不短於'a的生命週期'b

可以使用匿名生命週期,'_,消除雜訊

trait佔位符

這裡預設泛型型別位於addtrait 中。這裡是其定義:

trait add

這看來應該很熟悉,這是乙個帶有乙個方法和乙個關聯型別的 trait。比較陌生的部分是尖括號中的rhs=self:這個語法叫做預設型別引數(default type parameters)。rhs是乙個泛型型別引數(「right hand side」 的縮寫),它用於定義add方法中的rhs引數。如果實現addtrait 時不指定rhs的具體型別,rhs的型別將是預設的self型別,也就是在其上實現add的型別。

完全限定語法,這是呼叫函式時最為明確的方式。

C語言複習筆記 7

所謂除錯 debug 就是讓 一步一步慢慢執行,跟蹤程式的執行過程。比如,可以讓程式停在某個地方,檢視當前所有變數的值,或者記憶體中的資料 也可以讓程式一次只執行一條或者幾條語句,看看程式到底執行了哪些 在除錯的過程中,我們可以監控程式的每乙個細節,包括變數的值 函式的呼叫過程 記憶體中資料 執行緒...

Rust學習筆記

toc rust學習筆記 初步閱讀rust的 以學習rust語言 match 採用表示式的形式,然後根據它的值來分支。分支的每個 臂 都是 val expression 的形式。當值匹配時,這個臂的表示式將被執行實現。之所以稱之為 match 是因為 模式匹配 的術語,而這種正是 match 實現的...

Rust 巨集筆記

rust 巨集筆記 這篇文章說的是?rust 的巨集。宣告巨集 declarative macro 和過程巨集 procedural macro 前者指的是用某種語法直接宣告出的巨集。後者是對應直接生成抽象語法樹的過程的巨集。直覺上過程巨集更隱式,更全能 宣告巨集更可讀,更直接。如何定義宣告巨集?現...