pub trait Eq: PartialEq { }Expand description
Trait for comparisons corresponding to equivalence relations.
The primary difference to PartialEq is the additional requirement for reflexivity. A type
that implements PartialEq guarantees that for all a, b and c:
- symmetric:
a == bimpliesb == aanda != bimplies!(a == b) - transitive:
a == bandb == cimpliesa == c
Eq, which builds on top of PartialEq also implies:
- reflexive:
a == a
This property cannot be checked by the compiler, and therefore Eq is a trait without methods.
Violating this property is a logic error. The behavior resulting from a logic error is not
specified, but users of the trait must ensure that such logic errors do not result in
undefined behavior. This means that unsafe code must not rely on the correctness of these
methods.
Floating point types such as f32 and f64 implement only PartialEq but not Eq
because NaN != NaN.
§Derivable
This trait can be used with #[derive]. When derived, because Eq has no extra methods, it
is only informing the compiler that this is an equivalence relation rather than a partial
equivalence relation. Note that the derive strategy requires all fields are Eq, which isn’t
always desired.
§How can I implement Eq?
If you cannot use the derive strategy, specify that your type implements Eq, which has no
extra methods:
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 {}Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
impl Eq for TryReserveErrorKind
impl Eq for AsciiChar
impl Eq for core::cmp::Ordering
impl Eq for Infallible
impl Eq for FromBytesWithNulError
impl Eq for core::fmt::Alignment
impl Eq for DebugAsHex
impl Eq for Sign
impl Eq for AtomicOrdering
impl Eq for SimdAlign
impl Eq for IpAddr
impl Eq for Ipv6MulticastScope
impl Eq for SocketAddr
impl Eq for FpCategory
impl Eq for IntErrorKind
impl Eq for GetDisjointMutError
impl Eq for SearchStep
impl Eq for core::sync::atomic::Ordering
impl Eq for BacktraceStatus
impl Eq for VarError
impl Eq for SeekFrom
impl Eq for ErrorKind
impl Eq for Shutdown
impl Eq for BacktraceStyle
impl Eq for RecvTimeoutError
impl Eq for TryRecvError
impl Eq for json::error::Error
impl Eq for JsonValue
impl Eq for num_bigfloat::defs::Error
impl Eq for RoundingMode
impl Eq for BernoulliError
impl Eq for WeightedError
impl Eq for BigEndian
impl Eq for LittleEndian
impl Eq for bool
impl Eq for char
impl Eq for i8
impl Eq for i16
impl Eq for i32
impl Eq for i64
impl Eq for i128
impl Eq for isize
impl Eq for !
impl Eq for str
impl Eq for u8
impl Eq for u16
impl Eq for u32
impl Eq for u64
impl Eq for u128
impl Eq for ()
impl Eq for usize
impl Eq for BigFloat
impl Eq for ByteString
impl Eq for UnorderedKeyError
impl Eq for TryReserveError
impl Eq for CString
impl Eq for FromVecWithNulError
impl Eq for IntoStringError
impl Eq for NulError
impl Eq for FromUtf8Error
impl Eq for String
impl Eq for Layout
impl Eq for LayoutError
impl Eq for core::alloc::AllocError
impl Eq for TypeId
impl Eq for ByteStr
impl Eq for CharTryFromError
impl Eq for ParseCharError
impl Eq for DecodeUtf16Error
impl Eq for TryFromCharError
impl Eq for CStr
impl Eq for FromBytesUntilNulError
impl Eq for core::fmt::Error
impl Eq for FormattingOptions
impl Eq for PhantomPinned
impl Eq for Assume
impl Eq for Ipv4Addr
impl Eq for Ipv6Addr
impl Eq for AddrParseError
impl Eq for SocketAddrV4
impl Eq for SocketAddrV6
impl Eq for ParseFloatError
impl Eq for ParseIntError
impl Eq for TryFromIntError
impl Eq for RangeFull
impl Eq for Location<'_>
impl Eq for core::ptr::alignment::Alignment
impl Eq for ParseBoolError
impl Eq for Utf8Error
impl Eq for Duration
impl Eq for TryFromFloatSecsError
impl Eq for OsStr
impl Eq for OsString
impl Eq for FileType
impl Eq for Permissions
impl Eq for UCred
impl Eq for Components<'_>
impl Eq for Path
impl Eq for PathBuf
impl Eq for StripPrefixError
impl Eq for ExitStatus
impl Eq for ExitStatusError
impl Eq for Output
impl Eq for RecvError
impl Eq for WaitTimeoutResult
impl Eq for AccessError
impl Eq for ThreadId
impl Eq for Instant
impl Eq for SystemTime
impl Eq for futures_channel::mpsc::SendError
impl Eq for Canceled
impl Eq for getrandom::error::Error
impl Eq for __darwin_arm_exception_state64
impl Eq for __darwin_arm_neon_state64
impl Eq for __darwin_arm_thread_state64
impl Eq for __darwin_mcontext64
impl Eq for malloc_zone_t
impl Eq for ucontext_t
impl Eq for bpf_hdr
impl Eq for if_data
impl Eq for pthread_attr_t
impl Eq for pthread_once_t
impl Eq for timeval32
impl Eq for Dl_info
impl Eq for addrinfo
impl Eq for aiocb
impl Eq for arphdr
impl Eq for attribute_set_t
impl Eq for attrlist
impl Eq for attrreference_t
impl Eq for ctl_info
impl Eq for dirent
impl Eq for dqblk
impl Eq for flock
impl Eq for fpunchhole_t
impl Eq for fspecread_t
impl Eq for fstore_t
impl Eq for ftrimactivefile_t
impl Eq for glob_t
impl Eq for host_cpu_load_info
impl Eq for icmp6_ifstat
impl Eq for if_data64
impl Eq for if_msghdr2
impl Eq for if_msghdr
impl Eq for ifa_msghdr
impl Eq for ifconf
impl Eq for ifdevmtu
impl Eq for ifkpi
impl Eq for ifma_msghdr2
impl Eq for ifma_msghdr
impl Eq for ifmibdata
impl Eq for ifreq
impl Eq for ifs_iso_8802_3
impl Eq for image_offset
impl Eq for in6_addrlifetime
impl Eq for in6_ifreq
impl Eq for in6_ifstat
impl Eq for in6_pktinfo
impl Eq for in_addr
impl Eq for in_pktinfo
impl Eq for ip_mreq
impl Eq for ip_mreq_source
impl Eq for ip_mreqn
impl Eq for ipc_perm
impl Eq for kevent64_s
impl Eq for kevent
impl Eq for lconv
impl Eq for load_command
impl Eq for log2phys
impl Eq for mach_header
impl Eq for mach_header_64
impl Eq for mach_task_basic_info
impl Eq for mach_timebase_info
impl Eq for malloc_statistics_t
impl Eq for mstats
impl Eq for ntptimeval
impl Eq for os_unfair_lock_s
impl Eq for proc_bsdinfo
impl Eq for proc_fdinfo
impl Eq for proc_taskallinfo
impl Eq for proc_taskinfo
impl Eq for proc_threadinfo
impl Eq for proc_vnodepathinfo
impl Eq for processor_basic_info
impl Eq for processor_cpu_load_info
impl Eq for processor_set_basic_info
impl Eq for processor_set_load_info
impl Eq for pthread_cond_t
impl Eq for pthread_condattr_t
impl Eq for pthread_mutex_t
impl Eq for pthread_mutexattr_t
impl Eq for pthread_rwlock_t
impl Eq for pthread_rwlockattr_t
impl Eq for radvisory
impl Eq for rt_metrics
impl Eq for rt_msghdr2
impl Eq for rt_msghdr
impl Eq for rusage_info_v0
impl Eq for rusage_info_v1
impl Eq for rusage_info_v2
impl Eq for rusage_info_v3
impl Eq for rusage_info_v4
impl Eq for sa_endpoints_t
impl Eq for sched_param
impl Eq for segment_command
impl Eq for segment_command_64
impl Eq for sembuf
impl Eq for semid_ds
impl Eq for sf_hdtr
impl Eq for shmid_ds
impl Eq for sigaction
impl Eq for sigevent
impl Eq for siginfo_t
impl Eq for sockaddr_ctl
impl Eq for sockaddr_dl
impl Eq for sockaddr_in
impl Eq for sockaddr_inarp
impl Eq for sockaddr_ndrv
impl Eq for sockaddr_storage
impl Eq for sockaddr_vm
impl Eq for stack_t
impl Eq for stat
impl Eq for statfs
impl Eq for statvfs
impl Eq for task_thread_times_info
impl Eq for tcp_connection_info
impl Eq for termios
impl Eq for thread_affinity_policy
impl Eq for thread_background_policy
impl Eq for thread_basic_info
impl Eq for thread_extended_info
impl Eq for thread_extended_policy
impl Eq for thread_identifier_info
impl Eq for thread_latency_qos_policy
impl Eq for thread_precedence_policy
impl Eq for thread_standard_policy
impl Eq for thread_throughput_qos_policy
impl Eq for thread_time_constraint_policy
impl Eq for time_value_t
impl Eq for timex
impl Eq for utmpx
impl Eq for vinfo_stat
impl Eq for vm_range_t
impl Eq for vm_statistics64
impl Eq for vm_statistics
impl Eq for vnode_info
impl Eq for vnode_info_path
impl Eq for vol_attributes_attr_t
impl Eq for vol_capabilities_attr_t
impl Eq for xsw_usage
impl Eq for xucred
impl Eq for cmsghdr
impl Eq for fd_set
impl Eq for fsid_t
impl Eq for if_nameindex
impl Eq for ifaddrs
impl Eq for msghdr
impl Eq for option
impl Eq for passwd
impl Eq for regex_t
impl Eq for regmatch_t
impl Eq for sockaddr
impl Eq for sockaddr_in6
impl Eq for sockaddr_un
impl Eq for tm
impl Eq for utsname
impl Eq for group
impl Eq for hostent
impl Eq for in6_addr
impl Eq for iovec
impl Eq for ipv6_mreq
impl Eq for itimerval
impl Eq for linger
impl Eq for pollfd
impl Eq for protoent
impl Eq for rlimit
impl Eq for rusage
impl Eq for servent
impl Eq for sigval
impl Eq for timespec
impl Eq for timeval
impl Eq for tms
impl Eq for utimbuf
impl Eq for winsize
impl Eq for vec256_storage
impl Eq for vec512_storage
impl Eq for StepRng
impl Eq for StdRng
impl Eq for ChaCha8Core
impl Eq for ChaCha8Rng
impl Eq for ChaCha12Core
impl Eq for ChaCha12Rng
impl Eq for ChaCha20Core
impl Eq for ChaCha20Rng
impl Eq for zerocopy::error::AllocError
impl Eq for __c_anonymous_ifc_ifcu
impl Eq for __c_anonymous_ifk_data
impl Eq for __c_anonymous_ifr_ifru6
impl Eq for __c_anonymous_ifr_ifru
impl Eq for semun
impl Eq for vec128_storage
impl<'a> Eq for Utf8Pattern<'a>
impl<'a> Eq for Component<'a>
impl<'a> Eq for Prefix<'a>
impl<'a> Eq for PhantomContravariantLifetime<'a>
impl<'a> Eq for PhantomCovariantLifetime<'a>
impl<'a> Eq for PhantomInvariantLifetime<'a>
impl<'a> Eq for Utf8Chunk<'a>
impl<'a> Eq for PrefixComponent<'a>
impl<A> Eq for &A
impl<A> Eq for &mut A
impl<A, S, V> Eq for ConvertError<A, S, V>
impl<B> Eq for Cow<'_, B>
impl<B, C> Eq for ControlFlow<B, C>
impl<Dyn> Eq for DynMetadata<Dyn>where
Dyn: ?Sized,
impl<F> Eq for Fwhere
F: FnPtr,
impl<H> Eq for BuildHasherDefault<H>
impl<Idx> Eq for core::ops::range::Range<Idx>where
Idx: Eq,
impl<Idx> Eq for core::ops::range::RangeFrom<Idx>where
Idx: Eq,
impl<Idx> Eq for core::ops::range::RangeInclusive<Idx>where
Idx: Eq,
impl<Idx> Eq for RangeTo<Idx>where
Idx: Eq,
impl<Idx> Eq for core::ops::range::RangeToInclusive<Idx>where
Idx: Eq,
impl<Idx> Eq for core::range::Range<Idx>where
Idx: Eq,
impl<Idx> Eq for core::range::RangeFrom<Idx>where
Idx: Eq,
impl<Idx> Eq for core::range::RangeInclusive<Idx>where
Idx: Eq,
impl<Idx> Eq for core::range::RangeToInclusive<Idx>where
Idx: Eq,
impl<K, V, A> Eq for BTreeMap<K, V, A>
impl<K, V, S> Eq for HashMap<K, V, S>
impl<O> Eq for F32<O>where
O: Eq,
impl<O> Eq for F64<O>where
O: Eq,
impl<O> Eq for I16<O>where
O: Eq,
impl<O> Eq for I32<O>where
O: Eq,
impl<O> Eq for I64<O>where
O: Eq,
impl<O> Eq for I128<O>where
O: Eq,
impl<O> Eq for Isize<O>where
O: Eq,
impl<O> Eq for U16<O>where
O: Eq,
impl<O> Eq for U32<O>where
O: Eq,
impl<O> Eq for U64<O>where
O: Eq,
impl<O> Eq for U128<O>where
O: Eq,
impl<O> Eq for Usize<O>where
O: Eq,
impl<Ptr> Eq for Pin<Ptr>
impl<Src, Dst> Eq for AlignmentError<Src, Dst>
impl<Src, Dst> Eq for SizeError<Src, Dst>
impl<Src, Dst> Eq for ValidityError<Src, Dst>
impl<T> Eq for Option<T>where
T: Eq,
impl<T> Eq for Bound<T>where
T: Eq,
impl<T> Eq for Poll<T>where
T: Eq,
impl<T> Eq for SendTimeoutError<T>where
T: Eq,
impl<T> Eq for std::sync::mpsc::TrySendError<T>where
T: Eq,
impl<T> Eq for *const Twhere
T: ?Sized,
Pointer equality is an equivalence relation.
impl<T> Eq for *mut Twhere
T: ?Sized,
Pointer equality is an equivalence relation.
impl<T> Eq for [T]where
T: Eq,
impl<T> Eq for (T₁, T₂, …, Tₙ)where
T: Eq,
This trait is implemented for tuples up to twelve items long.