Karşılaştırmalar
Bu özellikler (traits), değerler arasında karşılaştırmaları destekler. Tüm özellikler, bu özellikleri gerçekleştiren (implement) alanlar içeren türler için türetilebilir.
PartialEq
ve Eq
PartialEq
, gerekli metot eq
ve sağlanan metot ne
ile kısmi bir denklik ilişkisidir. ==
ve !=
operatörleri bu metotları çağırır.
struct Key { id: u32, metadata: Option<String>, } impl PartialEq for Key { fn eq(&self, other: &Self) -> bool { self.id == other.id } }
Eq
tam bir denklik ilişkisidir (yansımalı, simetrik ve geçişme) (reflexive, symmetric, and transitive) ve PartialEq
özelliğini kapsar (imply). Tam denklik gerektiren fonksiyonlar, bir özellik sınırı (trait bound) olarak Eq
kullanır.
PartialOrd
ve Ord
PartialOrd
, partial_cmp
metoduyla kısmi bir sıralama tanımlar. <
, <=
, >=
ve >
operatörlerini gerçekleştirmek (implement) için kullanılır.
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
’nin Ordering
geri döndürdüğü tam bir sıralamadır.
-
PartialEq
farklı türler arasında gerçekleştirilebilir (implement), ancakEq
yansımalı (reflexive) olduğu için gerçekleştirilemez:struct Key { id: u32, metadata: Option<String>, } impl PartialEq<u32> for Key { fn eq(&self, other: &u32) -> bool { self.id == *other } }
-
Pratikte bu özellikleri (traits) türetmek (derive) yaygındır, ancak onları gerçekleştirmek (implement) yaygın değildir.
-
Rust’ta referansları karşılaştırırken, gösterdikleri şeylerin değerini karşılaştırır, referansların kendilerini DEĞİL. Bu, gösterilen değerler aynıysa, iki farklı şeye yapılan referansların eşit olarak karşılaştırılabileceği anlamına gelir:
fn main() { let a = "Merhaba"; let b = String::from("Merhaba"); assert_eq!(a, b); }