diff options
| author | Jonathan Turner <jonathandturner@users.noreply.github.com> | 2016-08-31 13:53:33 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-08-31 13:53:33 -0700 |
| commit | bfe51295b3e40e3f62b4949ba3b1eeeca9a8eaef (patch) | |
| tree | bfba017de763a26338ea82a1571a2ba4d0c58414 /src | |
| parent | 117cbb879e6ef498ea04e08bd80688bf2fc4a183 (diff) | |
| parent | ba69bc8b405f7e48eebda9f08f06fdf23af9027f (diff) | |
| download | rust-bfe51295b3e40e3f62b4949ba3b1eeeca9a8eaef.tar.gz rust-bfe51295b3e40e3f62b4949ba3b1eeeca9a8eaef.zip | |
Rollup merge of #35927 - matthew-piziak:bitandassign-example, r=GuillaumeGomez
replace `BitAndAssign` example with something more evocative This is the augmented-assignment version of PR #35809. r? @GuillaumeGomez
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcore/ops.rs | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/src/libcore/ops.rs b/src/libcore/ops.rs index 041a6c62f2f..2bb0c3c04e0 100644 --- a/src/libcore/ops.rs +++ b/src/libcore/ops.rs @@ -1564,24 +1564,66 @@ rem_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 } /// /// # Examples /// -/// A trivial implementation of `BitAndAssign`. When `Foo &= Foo` happens, it ends up -/// calling `bitand_assign`, and therefore, `main` prints `Bitwise And-ing!`. +/// In this example, the `&=` operator is lifted to a trivial `Scalar` type. /// /// ``` /// use std::ops::BitAndAssign; /// -/// struct Foo; +/// #[derive(Debug, PartialEq)] +/// struct Scalar(bool); /// -/// impl BitAndAssign for Foo { -/// fn bitand_assign(&mut self, _rhs: Foo) { -/// println!("Bitwise And-ing!"); +/// impl BitAndAssign for Scalar { +/// // rhs is the "right-hand side" of the expression `a &= b` +/// fn bitand_assign(&mut self, rhs: Self) { +/// *self = Scalar(self.0 & rhs.0) /// } /// } /// -/// # #[allow(unused_assignments)] /// fn main() { -/// let mut foo = Foo; -/// foo &= Foo; +/// let mut scalar = Scalar(true); +/// scalar &= Scalar(true); +/// assert_eq!(scalar, Scalar(true)); +/// +/// let mut scalar = Scalar(true); +/// scalar &= Scalar(false); +/// assert_eq!(scalar, Scalar(false)); +/// +/// let mut scalar = Scalar(false); +/// scalar &= Scalar(true); +/// assert_eq!(scalar, Scalar(false)); +/// +/// let mut scalar = Scalar(false); +/// scalar &= Scalar(false); +/// assert_eq!(scalar, Scalar(false)); +/// } +/// ``` +/// +/// In this example, the `BitAndAssign` trait is implemented for a +/// `BooleanVector` struct. +/// +/// ``` +/// use std::ops::BitAndAssign; +/// +/// #[derive(Debug, PartialEq)] +/// struct BooleanVector(Vec<bool>); +/// +/// impl BitAndAssign for BooleanVector { +/// // rhs is the "right-hand side" of the expression `a &= b` +/// fn bitand_assign(&mut self, rhs: Self) { +/// assert_eq!(self.0.len(), rhs.0.len()); +/// *self = BooleanVector(self.0 +/// .iter() +/// .zip(rhs.0.iter()) +/// .map(|(x, y)| *x && *y) +/// .collect()); +/// } +/// } +/// +/// fn main() { +/// let mut bv = BooleanVector(vec![true, true, false, false]); +/// bv &= BooleanVector(vec![true, false, true, false]); +/// let expected = BooleanVector(vec![true, false, false, false]); +/// assert_eq!(bv, expected); /// } /// ``` #[lang = "bitand_assign"] |
