日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Rust中的Eq和PartialEq詳解與實踐

來源: 責編: 時間:2024-04-11 09:05:38 198觀看
導讀在Rust編程語言中,為了重載操作符,我們需要實現相應的trait(特征)。比如為了使用比較運算符<、<=、>和>=,你需要實現PartialOrd特征。如果你希望使用加號+,則需要實現std::ops::Add特征。本文將詳細討論Eq和PartialEq特征,這

在Rust編程語言中,為了重載操作符,我們需要實現相應的trait(特征)。比如為了使用比較運算符<、<=、>和>=,你需要實現PartialOrd特征。如果你希望使用加號+,則需要實現std::ops::Add特征。本文將詳細討論Eq和PartialEq特征,這兩個特征分別用于實現==和!=操作符,我們將深入探討它們的區別,并提供實用的示例。Evo28資訊網——每日最新資訊28at.com

何為Eq和PartialEq?

Rust中的Eq和PartialEq是用于比較操作的兩個核心trait。如果你的類型需要支持相等性比較(即可以使用==和!=操作符進行比較),它們必須實現這兩個trait中的至少一個。 這兩者之間的主要區別在于"偏序性"(Partial)和"全序性"(Full)。PartialEq允許類型的部分值相互比較,而Eq要求類型的所有值在比較時都是確定的。Evo28資訊網——每日最新資訊28at.com

PartialEq的實現

首先,讓我們來看一個PartialEq的例子:Evo28資訊網——每日最新資訊28at.com

enum BookFormat { Paperback, Hardback, Ebook }struct Book {    isbn: i32,    format: BookFormat,}impl PartialEq for Book {    fn eq(&self, other: &Self) -> bool {        self.isbn == other.isbn    }}impl Eq for Book {}

這里Book結構體實現了PartialEq,但它也能夠自動獲得Eq的默認實現(沒有額外的行為需要定義)。Evo28資訊網——每日最新資訊28at.com

部分相等性 Partial Eq

浮點數類型f32和f64默認實現了PartialEq而非Eq。這是因為浮點數涉及一個特殊的值:NaN(不是一個數),NaN不與任何值(包括它自己)相等,這違反了Eq需要的全部相等性:Evo28資訊網——每日最新資訊28at.com

let f1 = f32::NAN;let f2 = f32::NAN;if f1 == f2 {    println!("NaN 竟然可以比較,這很不數學啊!");} else {    println!("果然,雖然兩個都是 NaN ,但是它們其實并不相等");}

在這段代碼中,輸出將會是"果然,雖然兩個都是 NaN ,但是它們其實并不相等"。Evo28資訊網——每日最新資訊28at.com

Ord與PartialOrd

類似于Eq和PartialEq,Ord和PartialOrd是另外一對重要的trait,它們分別用于全序比較和偏序比較。這意味著,實現Ord的類型其值必須能夠進行全序排序,而實現PartialOrd的類型則只能保證局部的順序關系。Evo28資訊網——每日最新資訊28at.com

讓我們看一個例子:Evo28資訊網——每日最新資訊28at.com

use std::fmt::Display;struct Pair<T> {    x: T,    y: T,}impl<T: Display+PartialOrd> Pair<T> {    fn cmp_display(&self) {        if self.x >= self.y {            println!("The largest member is x = {}", self.x);        } else {            println!("The largest member is y = {}", self.y);        }    }}

在這個例子中,我們定義了一個Pair<T>結構,該結構的兩個字段x和y都為泛型類型T。我們在此結構中實現Display和PartialOrd來比較這兩個字段的值。Evo28資訊網——每日最新資訊28at.com

結論

理解和合理使用Eq和PartialEq特征對于實現類型比較操作至關重要。在設計你自己的類型時,如果所有實例之間都是可以比較的,那么可以選擇實現Eq;否則,如果類型存在無法比較的特殊值(例如浮點數的NaN),則僅實現PartialEq即可。Evo28資訊網——每日最新資訊28at.com

每當我們定義比較行為時,無論是基于性能考慮還是邏輯要求,我們都應該仔細選擇正確的特征來實現。希望以上內容有助于你更好地理解和利用Rust語言的這一特性。Evo28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-82757-0.htmlRust中的Eq和PartialEq詳解與實踐

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 起飛了,Rust 構建 Spin 微服務框架,毫秒級的冷啟動!

下一篇: WPF 和 WinForms 關于句柄使用的區別

標簽:
  • 熱門焦點
  • 官方承諾:K60至尊版將會首批升級MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會搭載天璣9200+處理器和獨顯芯片X7的同時,Redmi給出了官方承諾,K60至尊重大更新首批升級,會首批推送MIUI 15。也就是說雖然
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • 6月iOS設備好評榜:第一蟬聯榜首近一年

    作為安兔兔各種榜單里變化最小的那個,2023年6月的iOS好評榜和上個月相比沒有任何排名上的變化,僅僅是部分設備好評率的下降,長年累月的用戶評價和逐漸退出市場的老款機器讓這
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業務來說可快速實現自動化的上手工作。Selenium IDEKat
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 谷歌KDD'23工作:如何提升推薦系統Ranking模型訓練穩定性

    谷歌在KDD 2023發表了一篇工作,探索了推薦系統ranking模型的訓練穩定性問題,分析了造成訓練穩定性存在問題的潛在原因,以及現有的一些提升模型穩定性方法的不足,并提出了一種新
  • 一個注解實現接口冪等,這樣才優雅!

    場景碼猿慢病云管理系統中其實高并發的場景不是很多,沒有必要每個接口都去考慮并發高的場景,比如添加住院患者的這個接口,具體的業務代碼就不貼了,業務偽代碼如下:圖片上述代碼有
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • 電博會與軟博會實現"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發揮展會拉動人流、信息流、資金流實現快速交互流動的作用,繼而推動區域經濟良性發展;又可以聚
Top 主站蜘蛛池模板: 新田县| 汪清县| 桂林市| 永宁县| 秦皇岛市| 丰镇市| 固原市| 黄山市| 台中市| 济南市| 台湾省| 台山市| 环江| 南安市| 双柏县| 红桥区| 会昌县| 营山县| 彭州市| 镶黄旗| 延庆县| 库伦旗| 漾濞| 平顺县| 大同市| 青龙| 鲁甸县| 高雄市| 革吉县| 株洲市| 胶南市| 桓仁| 屏山县| 南通市| 山阴县| 通许县| 湾仔区| 峨眉山市| 南京市| 岫岩| 铁岭市|