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

Rust調(diào)用函數(shù)操作符?.?和?::?的區(qū)別詳解

 更新時間:2023年07月14日 09:12:30   作者:Pomelo_劉金  
在Rust中,.和::操作符都可以用來調(diào)用方法,但它們的用法有所不同,所以本文就將詳細的給大家介紹一下.和::操作符的區(qū)別,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧

.操作符

在Rust中,.::操作符都可以用來調(diào)用方法,但它們的用法有所不同。

.操作符用于調(diào)用實例方法。實例方法是定義在類型上的方法,它需要一個類型的實例作為第一個參數(shù)(通常稱為self)。而實例方法(instance methods)與其他語言中的動態(tài)方法(dynamic methods)類似。都需要先聲明一個實例后,才可以用的方法。例如,下面是一個簡單的結(jié)構(gòu)體和一個實例方法的示例:

struct Point {
    x: i32,
    y: i32,
}
impl Point {
    fn distance_from_origin(&self) -> f64 {
        let x = self.x as f64;
        let y = self.y as f64;
        (x * x + y * y).sqrt()
    }
}
fn main() {
    let p = Point { x: 3, y: 4 };
    let d = p.distance_from_origin();
    println!("Distance from origin: {}", d);
}

上面的代碼定義了一個名為Point的結(jié)構(gòu)體,它有兩個字段xy。然后,我們在impl Point塊中定義了一個名為distance_from_origin的實例方法。這個方法接受一個名為self的參數(shù),它表示調(diào)用該方法的實例。在這個方法中,我們使用了self.xself.y來訪問實例的字段。

main函數(shù)中,我們創(chuàng)建了一個名為pPoint實例,并使用.操作符來調(diào)用它的實例方法。也就是說,我們使用了語句p.distance_from_origin()來調(diào)用該方法。

::操作符

::操作符則用于調(diào)用關(guān)聯(lián)函數(shù)。關(guān)聯(lián)函數(shù)也是定義在類型上的函數(shù),但它不需要一個類型的實例作為第一個參數(shù)。Rust中的關(guān)聯(lián)函數(shù)(associated functions)與其他語言中的靜態(tài)方法(static methods)類似。例如,下面是一個簡單的結(jié)構(gòu)體和一個關(guān)聯(lián)函數(shù)的示例:

struct Point {
    x: i32,
    y: i32,
}
impl Point {
    fn new(x: i32, y: i32) -> Self {
        Self { x, y }
    }
}
fn main() {
    let p = Point::new(3, 4);
}

上面的代碼定義了一個名為Point的結(jié)構(gòu)體,它有兩個字段xy。然后,我們在impl Point塊中定義了一個名為new的關(guān)聯(lián)函數(shù)。這個函數(shù)接受兩個參數(shù):x和y,并返回一個新創(chuàng)建的Point實例。

在main函數(shù)中,我們使用::操作符來調(diào)用Point類型上的關(guān)聯(lián)函數(shù)。也就是說,我們使用了語句Point::new(3, 4)來調(diào)用該函數(shù)。

如何選擇使用實例方法,還是關(guān)聯(lián)函數(shù)?

實例方法通常用于操作類型的實例。例如,您可以定義一個Point結(jié)構(gòu)體,它有兩個字段xy,然后定義一個實例方法來計算點到原點的距離。這個方法需要一個Point類型的實例作為第一個參數(shù),然后使用這個實例的字段來進行計算。

關(guān)聯(lián)函數(shù)通常用于執(zhí)行與類型相關(guān)但不依賴于類型實例的操作。例如,您可以定義一個關(guān)聯(lián)函數(shù)來創(chuàng)建一個新的Point實例。這個函數(shù)不需要一個Point類型的實例作為第一個參數(shù),而是接受一些參數(shù)來初始化新創(chuàng)建的實例。

在選擇使用實例方法還是關(guān)聯(lián)函數(shù)時,您應(yīng)該考慮您要執(zhí)行的操作是否依賴于類型的實例。如果是,則應(yīng)該使用實例方法;否則,應(yīng)該使用關(guān)聯(lián)函數(shù)。

以上就是Rust調(diào)用函數(shù)操作符 . 和 :: 的區(qū)別詳解的詳細內(nèi)容,更多關(guān)于Rust操作符 . 和 :: 區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Rust 生命周期符號使用的方法和規(guī)律

    詳解Rust 生命周期符號使用的方法和規(guī)律

    生命周期是 Rust 中處理引用和所有權(quán)的關(guān)鍵概念,通過正確使用生命周期符號和遵循相關(guān)規(guī)律,你可以編寫出安全、高效的 Rust 代碼,這篇文章主要介紹了Rust 生命周期符號使用的方法和規(guī)律,需要的朋友可以參考下
    2024-03-03
  • Rust使用Channel實現(xiàn)跨線程傳遞數(shù)據(jù)

    Rust使用Channel實現(xiàn)跨線程傳遞數(shù)據(jù)

    消息傳遞是一種很流行且能保證安全并發(fā)的技術(shù),Rust也提供了一種基于消息傳遞的并發(fā)方式,在rust里使用標準庫提供的Channel來實現(xiàn),下面我們就來學(xué)習(xí)一下如何使用Channel實現(xiàn)跨線程傳遞數(shù)據(jù)吧
    2023-12-12
  • Rust多線程Web服務(wù)器搭建過程

    Rust多線程Web服務(wù)器搭建過程

    這篇文章主要介紹了Rust多線程 Web 服務(wù)器搭建過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 一文弄懂Rust之切片

    一文弄懂Rust之切片

    在Rust中,切片是一種非常重要的引用類型,它允許你安全地引用一段連續(xù)內(nèi)存中的數(shù)據(jù),而不需要擁有這些數(shù)據(jù)的所有權(quán),本文主要介紹了Rust之切片,感興趣的可以了解一下
    2024-03-03
  • 使用Rust制作康威生命游戲的實現(xiàn)代碼

    使用Rust制作康威生命游戲的實現(xiàn)代碼

    這篇文章主要介紹了使用Rust制作康威生命游戲,初始rust項目,使用wasm的項目模板,結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Rust語言之trait中的個方法可以重寫嗎

    Rust語言之trait中的個方法可以重寫嗎

    在Rust中,trait定義了一組方法,這些方法可以被一個或多個類型實現(xiàn),當你為某個類型實現(xiàn)一個trait時,你可以為該trait中的每個方法提供自己的具體實現(xiàn),本文將給大家介紹一下trait中的個方法是否可以重寫,需要的朋友可以參考下
    2023-10-10
  • 詳解Rust中的所有權(quán)機制

    詳解Rust中的所有權(quán)機制

    Rust?語言提供了跟其他系統(tǒng)編程語言相同的方式來控制你使用的內(nèi)存,但擁有數(shù)據(jù)所有者在離開作用域后自動清除其數(shù)據(jù)的功能意味著你無須額外編寫和調(diào)試相關(guān)的控制代碼,這篇文章主要介紹了Rust中的所有權(quán)機制,需要的朋友可以參考下
    2022-10-10
  • Rust 累計時間長度的操作方法

    Rust 累計時間長度的操作方法

    在Rust中,如果你想要記錄累計時間,通常可以使用標準庫中的std::time::Duration類型,這篇文章主要介紹了Rust如何累計時間長度,需要的朋友可以參考下
    2024-05-05
  • rust類型轉(zhuǎn)換的實現(xiàn)

    rust類型轉(zhuǎn)換的實現(xiàn)

    Rust是類型安全的語言,因此在Rust中做類型轉(zhuǎn)換不是一件簡單的事,本文主要介紹了rust類型轉(zhuǎn)換的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • rust?zip異步壓縮與解壓的代碼詳解

    rust?zip異步壓縮與解壓的代碼詳解

    在使用actix-web框架的時候,如果使用zip解壓任務(wù)將會占用一個工作線程,因為zip庫是同步阻塞的,想用異步非阻塞需要用另一個庫,下面介紹下rust?zip異步壓縮與解壓的示例,感興趣的朋友一起看看吧
    2024-04-04

最新評論