Rust調(diào)用函數(shù)操作符?.?和?::?的區(qū)別詳解
.操作符
在Rust中,.
和::
操作符都可以用來(lái)調(diào)用方法,但它們的用法有所不同。
.
操作符用于調(diào)用實(shí)例方法。實(shí)例方法是定義在類(lèi)型上的方法,它需要一個(gè)類(lèi)型的實(shí)例作為第一個(gè)參數(shù)(通常稱(chēng)為self
)。而實(shí)例方法(instance methods)與其他語(yǔ)言中的動(dòng)態(tài)方法(dynamic methods)類(lèi)似。都需要先聲明一個(gè)實(shí)例后,才可以用的方法。例如,下面是一個(gè)簡(jiǎn)單的結(jié)構(gòu)體和一個(gè)實(shí)例方法的示例:
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); }
上面的代碼定義了一個(gè)名為Point
的結(jié)構(gòu)體,它有兩個(gè)字段x
和y
。然后,我們?cè)?code>impl Point塊中定義了一個(gè)名為distance_from_origin
的實(shí)例方法。這個(gè)方法接受一個(gè)名為self
的參數(shù),它表示調(diào)用該方法的實(shí)例。在這個(gè)方法中,我們使用了self.x
和self.y
來(lái)訪問(wèn)實(shí)例的字段。
在main
函數(shù)中,我們創(chuàng)建了一個(gè)名為p
的Point
實(shí)例,并使用.
操作符來(lái)調(diào)用它的實(shí)例方法。也就是說(shuō),我們使用了語(yǔ)句p.distance_from_origin()
來(lái)調(diào)用該方法。
::操作符
而::
操作符則用于調(diào)用關(guān)聯(lián)函數(shù)。關(guān)聯(lián)函數(shù)也是定義在類(lèi)型上的函數(shù),但它不需要一個(gè)類(lèi)型的實(shí)例作為第一個(gè)參數(shù)。Rust中的關(guān)聯(lián)函數(shù)(associated functions)與其他語(yǔ)言中的靜態(tài)方法(static methods)類(lèi)似。例如,下面是一個(gè)簡(jiǎn)單的結(jié)構(gòu)體和一個(gè)關(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); }
上面的代碼定義了一個(gè)名為Point
的結(jié)構(gòu)體,它有兩個(gè)字段x
和y
。然后,我們?cè)?code>impl Point塊中定義了一個(gè)名為new
的關(guān)聯(lián)函數(shù)。這個(gè)函數(shù)接受兩個(gè)參數(shù):x和y,并返回一個(gè)新創(chuàng)建的Point實(shí)例。
在main函數(shù)中,我們使用::操作符來(lái)調(diào)用Point類(lèi)型上的關(guān)聯(lián)函數(shù)。也就是說(shuō),我們使用了語(yǔ)句Point::new(3, 4)來(lái)調(diào)用該函數(shù)。
如何選擇使用實(shí)例方法,還是關(guān)聯(lián)函數(shù)?
實(shí)例方法通常用于操作類(lèi)型的實(shí)例。例如,您可以定義一個(gè)Point
結(jié)構(gòu)體,它有兩個(gè)字段x
和y
,然后定義一個(gè)實(shí)例方法來(lái)計(jì)算點(diǎn)到原點(diǎn)的距離。這個(gè)方法需要一個(gè)Point
類(lèi)型的實(shí)例作為第一個(gè)參數(shù),然后使用這個(gè)實(shí)例的字段來(lái)進(jìn)行計(jì)算。
關(guān)聯(lián)函數(shù)通常用于執(zhí)行與類(lèi)型相關(guān)但不依賴(lài)于類(lèi)型實(shí)例的操作。例如,您可以定義一個(gè)關(guān)聯(lián)函數(shù)來(lái)創(chuàng)建一個(gè)新的Point
實(shí)例。這個(gè)函數(shù)不需要一個(gè)Point
類(lèi)型的實(shí)例作為第一個(gè)參數(shù),而是接受一些參數(shù)來(lái)初始化新創(chuàng)建的實(shí)例。
在選擇使用實(shí)例方法還是關(guān)聯(lián)函數(shù)時(shí),您應(yīng)該考慮您要執(zhí)行的操作是否依賴(lài)于類(lèi)型的實(shí)例。如果是,則應(yīng)該使用實(shí)例方法;否則,應(yīng)該使用關(guān)聯(lián)函數(shù)。
以上就是Rust調(diào)用函數(shù)操作符 . 和 :: 的區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于Rust操作符 . 和 :: 區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Rust 生命周期符號(hào)使用的方法和規(guī)律
生命周期是 Rust 中處理引用和所有權(quán)的關(guān)鍵概念,通過(guò)正確使用生命周期符號(hào)和遵循相關(guān)規(guī)律,你可以編寫(xiě)出安全、高效的 Rust 代碼,這篇文章主要介紹了Rust 生命周期符號(hào)使用的方法和規(guī)律,需要的朋友可以參考下2024-03-03Rust使用Channel實(shí)現(xiàn)跨線程傳遞數(shù)據(jù)
消息傳遞是一種很流行且能保證安全并發(fā)的技術(shù),Rust也提供了一種基于消息傳遞的并發(fā)方式,在rust里使用標(biāo)準(zhǔn)庫(kù)提供的Channel來(lái)實(shí)現(xiàn),下面我們就來(lái)學(xué)習(xí)一下如何使用Channel實(shí)現(xiàn)跨線程傳遞數(shù)據(jù)吧2023-12-12使用Rust制作康威生命游戲的實(shí)現(xiàn)代碼
這篇文章主要介紹了使用Rust制作康威生命游戲,初始rust項(xiàng)目,使用wasm的項(xiàng)目模板,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09Rust語(yǔ)言之trait中的個(gè)方法可以重寫(xiě)嗎
在Rust中,trait定義了一組方法,這些方法可以被一個(gè)或多個(gè)類(lèi)型實(shí)現(xiàn),當(dāng)你為某個(gè)類(lèi)型實(shí)現(xiàn)一個(gè)trait時(shí),你可以為該trait中的每個(gè)方法提供自己的具體實(shí)現(xiàn),本文將給大家介紹一下trait中的個(gè)方法是否可以重寫(xiě),需要的朋友可以參考下2023-10-10Rust 累計(jì)時(shí)間長(zhǎng)度的操作方法
在Rust中,如果你想要記錄累計(jì)時(shí)間,通??梢允褂脴?biāo)準(zhǔn)庫(kù)中的std::time::Duration類(lèi)型,這篇文章主要介紹了Rust如何累計(jì)時(shí)間長(zhǎng)度,需要的朋友可以參考下2024-05-05rust類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)
Rust是類(lèi)型安全的語(yǔ)言,因此在Rust中做類(lèi)型轉(zhuǎn)換不是一件簡(jiǎn)單的事,本文主要介紹了rust類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12