Rust學習 結構體

2022-09-14 13:18:11 字數 1538 閱讀 2761

討論元組和結構體,比較、對比

如何定義和例項化結構體

如何定義關聯函式

一、結構體

使用struct 關鍵字宣告

struct user

例項可變可以使用點號修改結構體某個字段。

rust不允許只將乙個不可變的結構體中某個字段標記為可變。

元組結構體:

1. 給元組命名

2. 使元組成為與其他元組不同的型別

3. 除上述兩種情況外使用元組結構體就顯得多餘和形式化。

類單元結構體

1. 沒有任何欄位的結構體

2. 該結構體常常在想要在某個型別上實現trait,但不需要在型別中儲存資料時發揮作用。

結構體資料的所有權

結構體擁有資料所有權控制

若結構體中資料儲存被其他物件擁有的資料的引用,需要用上生命週期(lifetimes)來確保結構體中引用資料有效性跟結構體本身保持一致。否則編譯器會抱怨需要生命週期識別符號。

二、結構體示例

兩種debug列印結構體方式

前置標識(必須):

#[derive(debug)]

println!("rect: ", rect);

dbg!(***) :

直接輸出表示式結果值

巨集呼叫dbg!的檔案和行號

三、方法語法

方法與函式類似:

1. 使用fn關鍵字和名稱宣告

2. 擁有引數和返回值

3. 包含在某處呼叫該方法時會執行的**

不同點:

1. 方法在結構體的上下文中被定義

2. 並且方法的第乙個引數總是self

3. self代表呼叫該方法的結構體例項

impl rectangle

}在乙個 impl 塊中,self 型別是 impl 塊的型別的別名。

我們將某個型別例項能做的所有事情都一起放入 impl 塊中,而不是讓將來的使用者在我們的庫中到處尋找 ***xx 的功能。

方法的名稱可以與結構中的字段相同。

getters:

1. 與字段同名的方法將被定義為只返回欄位中的值,而不做其他事情。這樣的方法被稱為 getters。rust 並不像其他一些語言那樣為結構字段自動實現它們。

2. getters 很有用,因為你可以把字段變成私有的,但方法是公共的,這樣就可以把對字段的唯讀訪問作為該型別公共 api 的一部分。

rust自動引用和解引用:

1. 方法呼叫是 rust 中少數幾個擁有這種行為的地方。

2. 當使用 object.something() 呼叫方法時,rust 會自動為object新增 &、&mut 或 * 以便使 object 與方法簽名匹配。

關聯函式

1. 所有在impl塊中定義的函式稱為關聯函式

2. 不以self為第一引數,因此關聯函式不是方法

3. 關聯函式經常用作返回乙個結構體新例項的建構函式

4. 使用結構體名 + :: 語法來呼叫關聯函式:比如let sq = rectangle::square(3);

rust筆記5結構體

結構體的基本定義方式和使用方式 struct user fn main 上述的結構體是不可變的,如果想要在執行的時候改變結構體的值,需要宣告為可變的結構體 struct user fn main user2.username string from foo1 如果我們想用預設值的方式制定結構,可以利...

rust對結構體排序

use std cmp ordering use rand rng 匯入外部的包.記得修改toml檔案 保證age是可比較的 pub struct person t std cmp partialord 注意泛型t的位置 impl t person t where t std cmp partial...

Rust結構體關聯函式

除了 方法,rust塊還允許我們定義不用接收 self 作為引數的函式。由於這類函式與結構體相互關聯,所以它們也被稱為關聯函式 associated function 我們將其命名為函式而不是方法,是因為它們不會作用域某個具體的結構體例項。比如,曾經接觸過的string from就是關聯函式的一種。...