W3cubDocs

/Rust

Trait std::ops::Rem

#[lang = "rem"]
pub trait Rem<RHS = Self> {
    type Output = Self;
    fn rem(self, rhs: RHS) -> Self::Output;
}

The remainder operator %.

Note that RHS is Self by default, but this is not mandatory.

Examples

This example implements Rem on a SplitSlice object. After Rem is implemented, one can use the % operator to find out what the remaining elements of the slice would be after splitting it into equal slices of a given length.

use std::ops::Rem;

#[derive(PartialEq, Debug)]
struct SplitSlice<'a, T: 'a> {
    slice: &'a [T],
}

impl<'a, T> Rem<usize> for SplitSlice<'a, T> {
    type Output = SplitSlice<'a, T>;

    fn rem(self, modulus: usize) -> Self {
        let len = self.slice.len();
        let rem = len % modulus;
        let start = len - rem;
        SplitSlice {slice: &self.slice[start..]}
    }
}

// If we were to divide &[0, 1, 2, 3, 4, 5, 6, 7] into slices of size 3,
// the remainder would be &[6, 7].
assert_eq!(SplitSlice { slice: &[0, 1, 2, 3, 4, 5, 6, 7] } % 3,
           SplitSlice { slice: &[6, 7] });

Associated Types

The resulting type after applying the % operator.

Required Methods

Performs the % operation.

Implementors

© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/ops/trait.Rem.html