最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Rust中的方法

 更新時間:2022年10月16日 09:42:29   作者:Cukor丘克  
方法其實就是結(jié)構(gòu)體的成員函數(shù),在C語言中的結(jié)構(gòu)體是沒有成員函數(shù)的,但是Rust畢竟也是一門面向?qū)ο蟮木幊陶Z言,所以給結(jié)構(gòu)體加上方法的特性很符合面向?qū)ο蟮奶攸c,這篇文章主要介紹了Rust中的方法,需要的朋友可以參考下

Rust中的方法

方法其實就是結(jié)構(gòu)體的成員函數(shù),在C語言中的結(jié)構(gòu)體是沒有成員函數(shù)的,但是Rust畢竟也是一門面向?qū)ο蟮木幊陶Z言,所以給結(jié)構(gòu)體加上方法的特性很符合面向?qū)ο蟮奶攸c。

方法的簡單概念

方法(method)與函數(shù)類似:它們使用 fn 關(guān)鍵字和名稱聲明,可以擁有參數(shù)和返回值,同時包含在某處調(diào)用該方法時會執(zhí)行的代碼。不過方法與函數(shù)是不同的,因為它們在結(jié)構(gòu)體的上下文中被定義,并且它們第一個參數(shù)總是 self,它代表調(diào)用該方法的結(jié)構(gòu)體實例。

&self 實際上是 self: &Self 的縮寫,在一個 impl 塊中,Self 類型是 impl 塊的類型的別名。方法的第一個參數(shù)必須有一個名為 selfSelf 類型的參數(shù),所以 Rust 讓你在第一個參數(shù)位置上只用 self 這個名字來縮寫。傳參的時候可以忽略self的傳參。

上面這段話是官方文檔對方法的描述。如果學(xué)過面向?qū)ο蟮膽?yīng)該理解起來是沒人任何問題的,方法就是類中的成員函數(shù),在調(diào)用方法是必須通過類的實例對象類調(diào)用。

使用方法代替函數(shù)的好處:

  • 減少self參數(shù)的書寫
  • 組織性好

定義方法

定義方法的方式和定義函數(shù)的方式類似,也是采用fn作為標(biāo)識,但是方法比函數(shù)多一點的就是需要被包含在impl中。

impl是implementation的簡寫,翻譯成中文就是實施,實現(xiàn)的意思。在Rust中所有的方法都必須在對應(yīng)的結(jié)構(gòu)體的impl中實現(xiàn),并且方法的第一個參數(shù)是&self,其中&self就是指向當(dāng)前對象的引用,類似于C++中的this、Java中的this、Python中的self.

基本結(jié)構(gòu):

impl 結(jié)構(gòu)體名 {
    方法1...
    方法2...
    ....
    方法n...
}

//也可以再開一個impl
impl 結(jié)構(gòu)體名 {
    方法n+1....
}

//其中以上的效果和下面寫法等效
impl 結(jié)構(gòu)體名 {
        方法1...
    方法2...
    ....
    方法n...
    方法n+1....
}

可以重開一個impl的特性就像C++中的namespace一樣,如果想了解namespace的可自行查詢資料。

綜上所述,impl的作用就是用來標(biāo)識哪些方法是屬于哪個結(jié)構(gòu)體的。

例子:

struct MM {
    name: String,
    age: u8,
}

impl MM {
    fn get_name(&self) -> &str {
        &self.name
    }
    fn get_age(&self) -> &u8 {
        &self.age
    }
}

impl MM {
    fn show(&self) {
        println!("name: {}", self.name);
        println!("age: {}", self.age);
    }
}
/*上面兩個impl等效于以下代碼
impl MM {
    fn get_name(&self) -> &str {
        &self.name
    }
    
    fn get_age(&self) -> &u8 {
        &self.age
    }
    
    fn show(&self) {
        println!("name: {}", self.name);
        println!("age: {}", self.age);
    }
}
*/
fn main() {
    let mm = MM {
        name: String::from("Alice"),
        age: 18,
    };
    mm.show();
    println!("{}的名字叫: {}, 她今年{}歲了", mm.name, mm.get_name(), mm.get_age());
}

結(jié)果:

name: Alice
age: 18
Alice的名字叫: Alice, 她今年18歲了

Rust自動引用和解引用

在C++中訪問對象的內(nèi)容,一般都是使用指針和指針運(yùn)算符->來訪問對象中的屬性(成員變量)和行為(成員函數(shù))。但是在Rust沒有和->等效的運(yùn)算符。Rust是存在了自動引用和解引用的功能。

當(dāng)使用對象來調(diào)用方法時,Rust會自動為對象添加&、&mut*以便對象與方法簽名匹配,即下面的代碼是等價的:

mm.show();		//這種方法比較簡潔
(&mm).show();	//這種方法稍微多了點東西

這種自動引用的行為之所以有效,是因為方法有一個明確的接收者———— self 的類型。在給出接收者方法名的前提下,Rust 可以明確地計算出方法是僅僅讀?。?code>&self),做出修改(&mut self)或者是獲取所有權(quán)(self)。事實上,Rust 對方法接收者的隱式借用讓所有權(quán)在實踐中更友好。

//以下都是等效的,都可以修改age的值
mm.age = 19;
(&mut mm).age = 89;

Rust 對方法接收者的隱式借用讓所有權(quán)在實踐中更友好。意思就是使用對象直接點操作就行了。

帶參數(shù)的方法

因為方法和函數(shù)是類似的,所以在方法中也是可以傳參的。

直接看一個例子就直接跳過了。

impl MM {	//前面已經(jīng)聲明過MM的結(jié)構(gòu)體了
    fn eat(&self, food: &String) {
        println!("{}想吃{}", self.name, food);
    }
}
fn main() {
    let mm = MM {
        name: String::from("Alice"),
        age: 18,
        money: 100,
    };
    mm.eat(&"手撕雞".to_string());
}

結(jié)果:

Alice想吃手撕雞

小結(jié)

結(jié)構(gòu)體有意義的自定義類型。通過結(jié)構(gòu)體,我們可以將相關(guān)聯(lián)的數(shù)據(jù)片段聯(lián)系起來并命名它們,這樣可以使得代碼更加清晰。在 impl 塊中,你可以定義與你的類型相關(guān)聯(lián)的函數(shù),而方法是一種相關(guān)聯(lián)的函數(shù),讓你指定結(jié)構(gòu)體的實例所具有的行為。

但結(jié)構(gòu)體并不是創(chuàng)建自定義類型的唯一方法:讓我們轉(zhuǎn)向 Rust 的枚舉功能,為你的工具箱再添一個工具。

到此這篇關(guān)于Rust中的方法的文章就介紹到這了,更多相關(guān)Rust中的方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust?duckdb和polars讀csv文件比較情況

    Rust?duckdb和polars讀csv文件比較情況

    duckdb在數(shù)據(jù)分析上,有非常多不錯的特質(zhì),1、快;2、客戶體驗好,特別是可以同時批量讀csv在一個目錄下的csv等文件,今天來比較下Rust?duckdb和polars讀csv文件比較的情況,感興趣的朋友一起看看吧
    2024-06-06
  • Rust實現(xiàn)構(gòu)建器模式和如何使用Bon庫中的構(gòu)建器

    Rust實現(xiàn)構(gòu)建器模式和如何使用Bon庫中的構(gòu)建器

    這篇文章主要介紹了Rust實現(xiàn)構(gòu)建器模式和如何使用Bon庫中的構(gòu)建器,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Rust中字符串類型String的46種常用方法分享

    Rust中字符串類型String的46種常用方法分享

    Rust主要有兩種類型的字符串:&str和String,本文主要為大家介紹的是String類型的字符串以及它常用的46種方法,感興趣的小伙伴可以了解一下
    2023-06-06
  • 如何使用Rust的向量存儲值列表

    如何使用Rust的向量存儲值列表

    本文介紹了在Rust中使用向量存儲值列表的方法,包括創(chuàng)建、更新、讀取、遍歷、存儲多種類型以及內(nèi)存釋放等方面,向量是Rust中常用且強(qiáng)大的集合類型,熟練掌握其用法有助于編寫高效且安全的代碼
    2025-02-02
  • Rust中的引用循環(huán)與內(nèi)存泄漏詳解

    Rust中的引用循環(huán)與內(nèi)存泄漏詳解

    這篇文章主要介紹了在Rust中如何使用Rc和RefCell來創(chuàng)建引用循環(huán),以及引用循環(huán)可能導(dǎo)致的內(nèi)存泄漏問題,文章還討論了如何使用Weak類型來解決引用循環(huán)問題,特別是在需要雙向引用的場景中,如樹形結(jié)構(gòu),通過理解和掌握這些智能指針的使用,可以編寫更高效且內(nèi)存安全的Rust程序
    2025-02-02
  • Rust 中的 Packages 與 Crates模塊化構(gòu)建的基礎(chǔ)及開發(fā)流程

    Rust 中的 Packages 與 Crates模塊化構(gòu)建的基礎(chǔ)及開發(fā)流程

    Rust中的Crate是編譯器處理的最小代碼單元,可以是二進(jìn)制或庫,每個Crate由一個CrateRoot文件(通常是src/main.rs或src/lib.rs)定義,本文給大家介紹Rust 中的 Packages 與 Crates模塊化構(gòu)建的基礎(chǔ)及開發(fā)流程,感興趣的朋友一起看看吧
    2025-02-02
  • Rust Struct結(jié)構(gòu)體詳解

    Rust Struct結(jié)構(gòu)體詳解

    結(jié)構(gòu)體,是一種自定義數(shù)據(jù)類型,允許程序員將不同類型的數(shù)據(jù)結(jié)合起來,形成相關(guān)聯(lián)的整體。Rust的結(jié)構(gòu)體還提供方法和關(guān)聯(lián)函數(shù),可以指定那些與結(jié)構(gòu)體數(shù)據(jù)相關(guān)的行為
    2022-10-10
  • Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解

    Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解

    系統(tǒng)的開發(fā),測試和部署離不開環(huán)境變量,今天分享在Rust的系統(tǒng)開發(fā)中,使用dotenvy來讀取和使用環(huán)境變量,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 一文弄懂rust生命周期

    一文弄懂rust生命周期

    生命周期是Rust語言中的一個概念,用于決內(nèi)存安全問題,本文主要介紹了一文弄懂rust生命周期,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • rust多個mod文件引用和文件夾mod使用注意事項小結(jié)

    rust多個mod文件引用和文件夾mod使用注意事項小結(jié)

    在 Rust 項目中,可以使用 mod 關(guān)鍵字將一個文件夾或一個 rs 文件作為一個模塊引入到當(dāng)前文件中,本文給大家介紹rust多個mod文件引用和文件夾mod使用注意事項小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-03-03

最新評論

察哈| 郯城县| 毕节市| 原阳县| 高安市| 攀枝花市| 富宁县| 黎平县| 新巴尔虎左旗| 依兰县| 周宁县| 洮南市| 比如县| 大田县| 汤阴县| 通榆县| 临泉县| 通城县| 西宁市| 肇东市| 高州市| 平湖市| 宝鸡市| 彭阳县| 泌阳县| 榆中县| 河津市| 汉阴县| 出国| 鄯善县| 即墨市| 旺苍县| 五莲县| 名山县| 抚远县| 伊春市| 和政县| 鹿泉市| 泽州县| 朝阳县| 那坡县|