مقایسه
این traitها از مقایسه بین مقادیر پشتیبانی میکنند. همهی این traitها را میتوان برای تایپهایی که شامل فیلدهایی هستند که این traitها را پیادهسازی میکنند، بهدست آورد.
PartialEq
and Eq
PartialEq
یک رابطه همارزی جزئی است که دارای متد الزامی eq
و متد ارائهشده ne
میباشد. عملگرهای ==
و =!
این متدها را فراخوانی میکنند.
struct Key { id: u32, metadata: Option<String>, } impl PartialEq for Key { fn eq(&self, other: &Self) -> bool { self.id == other.id } }
Eq
یک رابطه همارزی کامل است (بازتابی، متقارن، و transitive) و شامل PartialEq
میشود. توابعی که به همارزی کامل نیاز دارند، از Eq
بهعنوان یک trait bound استفاده میکنند.
PartialOrd
and Ord
PartialOrd
یک ترتیب جزئی را تعریف میکند و دارای متد partial_cmp
است. این ویژگی برای پیادهسازی عملگرهای <
، <=
، >=
و >
استفاده میشود.
use std::cmp::Ordering; #[derive(Eq, PartialEq)] struct Citation { author: String, year: u32, } impl PartialOrd for Citation { fn partial_cmp(&self, other: &Self) -> Option<Ordering> { match self.author.partial_cmp(&other.author) { Some(Ordering::Equal) => self.year.partial_cmp(&other.year), author_ord => author_ord, } } }
Ord
یک ترتیب کامل است که در آن متد cmp
مقدار Ordering
را برمیگرداند.
PartialEq
میتواند بین تایپهای مختلف پیادهسازی شود، اما Eq
نمیتواند، زیرا بازتابی است:
struct Key { id: u32, metadata: Option<String>, } impl PartialEq<u32> for Key { fn eq(&self, other: &u32) -> bool { self.id == *other } }
در عمل، معمولاً این traitها بهطور خودکار بهدست میآیند، اما کمتر پیش میآید که آنها بهطور دستی پیادهسازی شوند.