討論元組和結構體,比較、對比
如何定義和例項化結構體
如何定義關聯函式
一、結構體
使用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就是關聯函式的一種。...