Trait sp_std::ops::Sub 1.0.0[−][src]
The subtraction operator -.
Note that Rhs is Self by default, but this is not mandatory. For
example, std::time::SystemTime implements Sub<Duration>, which permits
operations of the form SystemTime = SystemTime - Duration.
Examples
Subtractable points
use std::ops::Sub; #[derive(Debug, Copy, Clone, PartialEq)] struct Point { x: i32, y: i32, } impl Sub for Point { type Output = Self; fn sub(self, other: Self) -> Self::Output { Self { x: self.x - other.x, y: self.y - other.y, } } } assert_eq!(Point { x: 3, y: 3 } - Point { x: 2, y: 3 }, Point { x: 1, y: 0 });
Implementing Sub with generics
Here is an example of the same Point struct implementing the Sub trait
using generics.
use std::ops::Sub; #[derive(Debug, PartialEq)] struct Point<T> { x: T, y: T, } // Notice that the implementation uses the associated type `Output`. impl<T: Sub<Output = T>> Sub for Point<T> { type Output = Self; fn sub(self, other: Self) -> Self::Output { Point { x: self.x - other.x, y: self.y - other.y, } } } assert_eq!(Point { x: 2, y: 3 } - Point { x: 1, y: 0 }, Point { x: 1, y: 3 });
Associated Types
Loading content...Required methods
Loading content...Implementations on Foreign Types
impl Sub<Duration> for Instant[src]
impl Sub<Duration> for Instant[src]impl<'_, '_, T, S> Sub<&'_ HashSet<T, S>> for &'_ HashSet<T, S> where
T: Eq + Hash + Clone,
S: BuildHasher + Default, [src]
impl<'_, '_, T, S> Sub<&'_ HashSet<T, S>> for &'_ HashSet<T, S> where
T: Eq + Hash + Clone,
S: BuildHasher + Default, [src]type Output = HashSet<T, S>
pub fn sub(self, rhs: &HashSet<T, S>) -> HashSet<T, S>[src]
Returns the difference of self and rhs as a new HashSet<T, S>.
Examples
use std::collections::HashSet; let a: HashSet<_> = vec![1, 2, 3].into_iter().collect(); let b: HashSet<_> = vec![3, 4, 5].into_iter().collect(); let set = &a - &b; let mut i = 0; let expected = [1, 2]; for x in &set { assert!(expected.contains(x)); i += 1; } assert_eq!(i, expected.len());
impl Sub<Instant> for Instant[src]
impl Sub<Instant> for Instant[src]impl Sub<Duration> for SystemTime[src]
impl Sub<Duration> for SystemTime[src]type Output = SystemTime
pub fn sub(self, dur: Duration) -> SystemTime[src]
impl<'_, '_> Sub<&'_ u16> for &'_ u16[src]
impl<'_, '_> Sub<&'_ u16> for &'_ u16[src]impl<'_> Sub<&'_ u16> for u16[src]
impl<'_> Sub<&'_ u16> for u16[src]impl<'_> Sub<&'_ u32> for u32[src]
impl<'_> Sub<&'_ u32> for u32[src]impl<'a> Sub<u32> for &'a u32[src]
impl<'a> Sub<u32> for &'a u32[src]impl<'_> Sub<&'_ u64> for u64[src]
impl<'_> Sub<&'_ u64> for u64[src]impl<'a> Sub<usize> for &'a usize[src]
impl<'a> Sub<usize> for &'a usize[src]impl<'_, '_> Sub<&'_ u8> for &'_ u8[src]
impl<'_, '_> Sub<&'_ u8> for &'_ u8[src]impl<'_, '_> Sub<&'_ i16> for &'_ i16[src]
impl<'_, '_> Sub<&'_ i16> for &'_ i16[src]impl<'a> Sub<u64> for &'a u64[src]
impl<'a> Sub<u64> for &'a u64[src]impl<'_, '_> Sub<&'_ f64> for &'_ f64[src]
impl<'_, '_> Sub<&'_ f64> for &'_ f64[src]impl<'_> Sub<&'_ i128> for i128[src]
impl<'_> Sub<&'_ i128> for i128[src]impl<'a> Sub<i64> for &'a i64[src]
impl<'a> Sub<i64> for &'a i64[src]impl<'a> Sub<i8> for &'a i8[src]
impl<'a> Sub<i8> for &'a i8[src]impl<'_> Sub<&'_ u8> for u8[src]
impl<'_> Sub<&'_ u8> for u8[src]impl<'a> Sub<f32> for &'a f32[src]
impl<'a> Sub<f32> for &'a f32[src]impl<'a> Sub<i16> for &'a i16[src]
impl<'a> Sub<i16> for &'a i16[src]impl<'_> Sub<&'_ usize> for usize[src]
impl<'_> Sub<&'_ usize> for usize[src]impl<'a> Sub<u16> for &'a u16[src]
impl<'a> Sub<u16> for &'a u16[src]impl<'a> Sub<isize> for &'a isize[src]
impl<'a> Sub<isize> for &'a isize[src]impl<'_, '_> Sub<&'_ i64> for &'_ i64[src]
impl<'_, '_> Sub<&'_ i64> for &'_ i64[src]impl<'_> Sub<&'_ i32> for i32[src]
impl<'_> Sub<&'_ i32> for i32[src]impl<'_> Sub<&'_ f32> for f32[src]
impl<'_> Sub<&'_ f32> for f32[src]impl<'a> Sub<u8> for &'a u8[src]
impl<'a> Sub<u8> for &'a u8[src]impl<'a> Sub<f64> for &'a f64[src]
impl<'a> Sub<f64> for &'a f64[src]impl<'_, '_> Sub<&'_ i128> for &'_ i128[src]
impl<'_, '_> Sub<&'_ i128> for &'_ i128[src]impl<'_> Sub<&'_ u128> for u128[src]
impl<'_> Sub<&'_ u128> for u128[src]impl<'_> Sub<&'_ i64> for i64[src]
impl<'_> Sub<&'_ i64> for i64[src]impl<'a> Sub<i32> for &'a i32[src]
impl<'a> Sub<i32> for &'a i32[src]impl<'_, '_> Sub<&'_ u128> for &'_ u128[src]
impl<'_, '_> Sub<&'_ u128> for &'_ u128[src]impl<'_, '_> Sub<&'_ isize> for &'_ isize[src]
impl<'_, '_> Sub<&'_ isize> for &'_ isize[src]impl<'_> Sub<&'_ isize> for isize[src]
impl<'_> Sub<&'_ isize> for isize[src]impl<'_> Sub<&'_ f64> for f64[src]
impl<'_> Sub<&'_ f64> for f64[src]impl<'a> Sub<i128> for &'a i128[src]
impl<'a> Sub<i128> for &'a i128[src]impl<'_, '_> Sub<&'_ u64> for &'_ u64[src]
impl<'_, '_> Sub<&'_ u64> for &'_ u64[src]impl<'_> Sub<&'_ i8> for i8[src]
impl<'_> Sub<&'_ i8> for i8[src]impl<'_, '_> Sub<&'_ i32> for &'_ i32[src]
impl<'_, '_> Sub<&'_ i32> for &'_ i32[src]impl<'_> Sub<&'_ i16> for i16[src]
impl<'_> Sub<&'_ i16> for i16[src]impl<'_, '_> Sub<&'_ i8> for &'_ i8[src]
impl<'_, '_> Sub<&'_ i8> for &'_ i8[src]impl<'a> Sub<u128> for &'a u128[src]
impl<'a> Sub<u128> for &'a u128[src]impl Sub<Duration> for Duration[src]
impl Sub<Duration> for Duration[src]impl<'_, '_> Sub<&'_ f32> for &'_ f32[src]
impl<'_, '_> Sub<&'_ f32> for &'_ f32[src]impl<'_, '_> Sub<&'_ usize> for &'_ usize[src]
impl<'_, '_> Sub<&'_ usize> for &'_ usize[src]impl<'_, '_> Sub<&'_ u32> for &'_ u32[src]
impl<'_, '_> Sub<&'_ u32> for &'_ u32[src]Implementors
impl<'_, '_, T> Sub<&'_ BTreeSet<T>> for &'_ BTreeSet<T> where
T: Ord + Clone, [src]
impl<'_, '_, T> Sub<&'_ BTreeSet<T>> for &'_ BTreeSet<T> where
T: Ord + Clone, [src]type Output = BTreeSet<T>
pub fn sub(self, rhs: &BTreeSet<T>) -> BTreeSet<T>[src]
Returns the difference of self and rhs as a new BTreeSet<T>.
Examples
use std::collections::BTreeSet; let a: BTreeSet<_> = vec![1, 2, 3].into_iter().collect(); let b: BTreeSet<_> = vec![3, 4, 5].into_iter().collect(); let result = &a - &b; let result_vec: Vec<_> = result.into_iter().collect(); assert_eq!(result_vec, [1, 2]);