Apply review feedback · qinheping/verify-rust-std@aabd713 (original) (raw)

`@@ -278,7 +278,7 @@ pub macro PartialEq($item:item) {

`

278

278

`` /// The primary difference to [PartialEq] is the additional requirement for reflexivity. A type

``

279

279

`` /// that implements [PartialEq] guarantees that for all a, b and c:

``

280

280

`///

`

281

``

`` -

/// - symmetric: a == b implies b == a

``

``

281

`` +

/// - symmetric: a == b implies b == a and a != b implies !(a == b)

``

282

282

`` /// - transitive: a == b and b == c implies a == c

``

283

283

`///

`

284

284

`` /// Eq, which builds on top of [PartialEq] also implies:

``

`@@ -332,11 +332,9 @@ pub macro PartialEq($item:item) {

`

332

332

`#[stable(feature = "rust1", since = "1.0.0")]

`

333

333

`#[rustc_diagnostic_item = "Eq"]

`

334

334

`pub trait Eq: PartialEq {

`

335

``

`-

// this method is used solely by #[derive(Eq)] to assert

`

336

``

`` -

// that every component of a type implements Eq

``

337

``

`-

// itself. The current deriving infrastructure means doing this

`

338

``

`-

// assertion without using a method on this trait is nearly

`

339

``

`-

// impossible.

`

``

335

`` +

// this method is used solely by impl Eq or #[derive(Eq)] to assert that every component of a

``

``

336

`` +

// type implements Eq itself. The current deriving infrastructure means doing this assertion

``

``

337

`+

// without using a method on this trait is nearly impossible.

`

340

338

`//

`

341

339

`// This should never be implemented by hand.

`

342

340

`#[doc(hidden)]

`

`@@ -789,11 +787,13 @@ impl<T: Clone> Clone for Reverse {

`

789

787

`` /// fashion Ord builds on top of [PartialOrd] and adds further properties, such as totality,

``

790

788

`/// which means all values must be comparable.

`

791

789

`///

`

792

``

`` -

/// Because of different signatures, Ord cannot be a simple marker trait like Eq. So it can't be

``

793

``

`` -

/// derived automatically when PartialOrd is implemented. The recommended best practice for a

``

794

``

`` -

/// type that manually implements Ord is to implement the equality comparison logic in PartialEq

``

795

``

`` -

/// and implement the ordering comparison logic in Ord. From there one should implement

``

796

``

`` -

/// PartialOrd as Some(self.cmp(other)).

``

``

790

`` +

/// Ord requires that the type also be PartialOrd, PartialEq, and Eq.

``

``

791

`+

///

`

``

792

`` +

/// Because Ord implies a stronger ordering relationship than [PartialOrd], and both Ord and

``

``

793

`` +

/// [PartialOrd] must agree, you must choose how to implement Ord first. You can choose to

``

``

794

`+

/// derive it, or implement it manually. If you derive it, you should derive all four traits. If you

`

``

795

`+

/// implement it manually, you should manually implement all four traits, based on the

`

``

796

`` +

/// implementation of Ord.

``

797

797

`///

`

798

798

`` /// Here's an example where you want to define the Character comparison by health and

``

799

799

`` /// experience only, disregarding the field mana:

``

`@@ -888,7 +888,7 @@ impl<T: Clone> Clone for Reverse {

`

888

888

```` /// ```


`889`

`889`

`/// use std::cmp::Ordering;

`

`890`

`890`

`///

`

`891`

``

`-

/// #[derive(Eq, Debug)]

`

``

`891`

`+

/// #[derive(Debug)]

`

`892`

`892`

`/// struct Character {

`

`893`

`893`

`/// health: u32,

`

`894`

`894`

`/// experience: u32,

`

`@@ -918,6 +918,8 @@ impl<T: Clone> Clone for Reverse<T> {

`

`918`

`918`

`/// }

`

`919`

`919`

`/// }

`

`920`

`920`

`///

`

``

`921`

`+

/// impl Eq for Character {}

`

``

`922`

`+

///

`

`921`

`923`

`/// let a = Character {

`

`922`

`924`

`/// health: 3,

`

`923`

`925`

`/// experience: 5,

`

`@@ -1191,7 +1193,6 @@ pub macro Ord($item:item) {

`

`1191`

`1193`

```` /// ```

1192

1194

`/// use std::cmp::Ordering;

`

1193

1195

`///

`

1194

``

`-

/// #[derive(Eq)]

`

1195

1196

`/// struct Person {

`

1196

1197

`/// id: u32,

`

1197

1198

`/// name: String,

`

`@@ -1215,6 +1216,8 @@ pub macro Ord($item:item) {

`

1215

1216

`/// self.height == other.height

`

1216

1217

`/// }

`

1217

1218

`/// }

`

``

1219

`+

///

`

``

1220

`+

/// impl Eq for Person {}

`

1218

1221

```` /// ```

````

1219

1222

`///

`

1220

1223

`` /// You may also find it useful to use [partial_cmp] on your type's fields. Here is an example of

``