欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Rust中的方法

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

Rust中的方法

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

方法的簡(jiǎn)單概念

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

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

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

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

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

定義方法

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

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

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

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

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

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

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

綜上所述,impl的作用就是用來(lái)標(biāo)識(shí)哪些方法是屬于哪個(gè)結(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);
    }
}
/*上面兩個(gè)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自動(dòng)引用和解引用

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

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

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

這種自動(dòng)引用的行為之所以有效,是因?yàn)榉椒ㄓ幸粋€(gè)明確的接收者———— self 的類型。在給出接收者方法名的前提下,Rust 可以明確地計(jì)算出方法是僅僅讀取(&self),做出修改(&mut self)或者是獲取所有權(quán)(self)。事實(shí)上,Rust 對(duì)方法接收者的隱式借用讓所有權(quán)在實(shí)踐中更友好。

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

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

帶參數(shù)的方法

因?yàn)榉椒ê秃瘮?shù)是類似的,所以在方法中也是可以傳參的。

直接看一個(gè)例子就直接跳過(guò)了。

impl MM {	//前面已經(jīng)聲明過(guò)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)體有意義的自定義類型。通過(guò)結(jié)構(gòu)體,我們可以將相關(guān)聯(lián)的數(shù)據(jù)片段聯(lián)系起來(lái)并命名它們,這樣可以使得代碼更加清晰。在 impl 塊中,你可以定義與你的類型相關(guān)聯(lián)的函數(shù),而方法是一種相關(guān)聯(lián)的函數(shù),讓你指定結(jié)構(gòu)體的實(shí)例所具有的行為。

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

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

相關(guān)文章

  • rust的package,crate,module示例解析

    rust的package,crate,module示例解析

    rust提供了非常優(yōu)秀的包管理器cargo,我們可以使用crate,module,package來(lái)組織代碼,這篇文章主要介紹了rust的package,crate,module相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 詳解Rust中三種循環(huán)(loop,while,for)的使用

    詳解Rust中三種循環(huán)(loop,while,for)的使用

    我們常常需要重復(fù)執(zhí)行同一段代碼,針對(duì)這種場(chǎng)景,Rust?提供了多種循環(huán)(loop)工具。一個(gè)循環(huán)會(huì)執(zhí)行循環(huán)體中的代碼直到結(jié)尾,并緊接著回到開(kāi)頭繼續(xù)執(zhí)行。而?Rust?提供了?3?種循環(huán):loop、while?和?for,下面逐一講解
    2022-09-09
  • Rust?中?Mutex?的基本用法

    Rust?中?Mutex?的基本用法

    Rust?標(biāo)準(zhǔn)庫(kù)中的?Mutex?結(jié)構(gòu)體位于?std::sync::Mutex?中,它提供了線程安全的數(shù)據(jù)訪問(wèn),Mutex?保證了在同一時(shí)間只有一個(gè)線程可以訪問(wèn)被鎖定的數(shù)據(jù),這篇文章主要介紹了Rust?中?Mutex?的基本用法,需要的朋友可以參考下
    2024-05-05
  • Rust聲明宏在不同K線bar類型中的應(yīng)用小結(jié)

    Rust聲明宏在不同K線bar類型中的應(yīng)用小結(jié)

    在K線bar中,往往有很多不同分時(shí)k線圖,比如1,2,3,5,,,,,60,120,250,300…,,不同分鐘類型,如果不用宏,那么手寫(xiě)會(huì)比較麻煩,下面就試用一下宏來(lái)實(shí)現(xiàn)不同類型的bar,感興趣的朋友一起看看吧
    2024-05-05
  • MacBook Pro安裝rust編程環(huán)境的過(guò)程

    MacBook Pro安裝rust編程環(huán)境的過(guò)程

    rustup是一個(gè)用于管理Rust版本和工具鏈的工具,這篇文章主要介紹了MacBook Pro安裝rust編程環(huán)境的過(guò)程,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • rust文件讀寫(xiě)的實(shí)現(xiàn)示例

    rust文件讀寫(xiě)的實(shí)現(xiàn)示例

    Rust語(yǔ)言提供了強(qiáng)大的文件讀寫(xiě)庫(kù),使得開(kāi)發(fā)者可以更加方便地進(jìn)行文件操作,并且其安全性可以有效避免文件操作中可能出現(xiàn)的風(fēng)險(xiǎn),本文就來(lái)詳細(xì)的介紹了rust文件讀寫(xiě)的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2023-12-12
  • Rust?Atomics?and?Locks?源碼解讀

    Rust?Atomics?and?Locks?源碼解讀

    這篇文章主要為大家介紹了Rust?Atomics?and?Locks?源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Rust?duckdb和polars讀csv文件比較情況

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

    duckdb在數(shù)據(jù)分析上,有非常多不錯(cuò)的特質(zhì),1、快;2、客戶體驗(yàn)好,特別是可以同時(shí)批量讀csv在一個(gè)目錄下的csv等文件,今天來(lái)比較下Rust?duckdb和polars讀csv文件比較的情況,感興趣的朋友一起看看吧
    2024-06-06
  • Rust 中解析 JSON的方法

    Rust 中解析 JSON的方法

    要開(kāi)始在 Rust 中使用 JSON,您需要安裝一個(gè)可以輕松操作 JSON 的庫(kù),目前可用的流行crate之一是 serde-json,在本文中,我們將討論如何在 Rust 中使用 JSON 解析庫(kù),以及比較最流行的庫(kù)及其性能
    2024-03-03
  • Rust 中的文件操作示例詳解

    Rust 中的文件操作示例詳解

    Rust 中的路徑操作是跨平臺(tái)的,std::path 模塊提供的了兩個(gè)用于描述路徑的類型,本文給大家介紹Rust 中的文件操作示例詳解,感興趣的朋友一起看看吧
    2021-11-11

最新評(píng)論