Trait core::ops::Mul 1.0.0
[−]
[src]
pub trait Mul<RHS = Self> {
type Output;
fn mul(self, rhs: RHS) -> Self::Output;
}The Mul trait is used to specify the functionality of *.
Examples
A trivial implementation of Mul. When Foo * Foo happens, it ends up
calling mul, and therefore, main prints Multiplying!.
use std::ops::Mul; struct Foo; impl Mul for Foo { type Output = Foo; fn mul(self, _rhs: Foo) -> Foo { println!("Multiplying!"); self } } fn main() { Foo * Foo; }
Note that RHS = Self by default, but this is not mandatory. Here is an
implementation which enables multiplication of vectors by scalars, as is
done in linear algebra.
use std::ops::Mul; struct Scalar {value: usize}; #[derive(Debug)] struct Vector {value: Vec<usize>}; impl Mul<Vector> for Scalar { type Output = Vector; fn mul(self, rhs: Vector) -> Vector { Vector {value: rhs.value.iter().map(|v| self.value * v).collect()} } } impl PartialEq<Vector> for Vector { fn eq(&self, other: &Self) -> bool { self.value == other.value } } let scalar = Scalar{value: 3}; let vector = Vector{value: vec![2, 4, 6]}; assert_eq!(scalar * vector, Vector{value: vec![6, 12, 18]});
Associated Types
type Output
The resulting type after applying the * operator
Required Methods
fn mul(self, rhs: RHS) -> Self::Output
The method for the * operator
Implementors
impl Mul for Wrapping<usize>impl Mul for Wrapping<u8>impl Mul for Wrapping<u16>impl Mul for Wrapping<u32>impl Mul for Wrapping<u64>impl Mul for Wrapping<isize>impl Mul for Wrapping<i8>impl Mul for Wrapping<i16>impl Mul for Wrapping<i32>impl Mul for Wrapping<i64>impl Mul for usizeimpl<'a> Mul<usize> for &'a usizeimpl<'a> Mul<&'a usize> for usizeimpl<'a, 'b> Mul<&'a usize> for &'b usizeimpl Mul for u8impl<'a> Mul<u8> for &'a u8impl<'a> Mul<&'a u8> for u8impl<'a, 'b> Mul<&'a u8> for &'b u8impl Mul for u16impl<'a> Mul<u16> for &'a u16impl<'a> Mul<&'a u16> for u16impl<'a, 'b> Mul<&'a u16> for &'b u16impl Mul for u32impl<'a> Mul<u32> for &'a u32impl<'a> Mul<&'a u32> for u32impl<'a, 'b> Mul<&'a u32> for &'b u32impl Mul for u64impl<'a> Mul<u64> for &'a u64impl<'a> Mul<&'a u64> for u64impl<'a, 'b> Mul<&'a u64> for &'b u64impl Mul for isizeimpl<'a> Mul<isize> for &'a isizeimpl<'a> Mul<&'a isize> for isizeimpl<'a, 'b> Mul<&'a isize> for &'b isizeimpl Mul for i8impl<'a> Mul<i8> for &'a i8impl<'a> Mul<&'a i8> for i8impl<'a, 'b> Mul<&'a i8> for &'b i8impl Mul for i16impl<'a> Mul<i16> for &'a i16impl<'a> Mul<&'a i16> for i16impl<'a, 'b> Mul<&'a i16> for &'b i16impl Mul for i32impl<'a> Mul<i32> for &'a i32impl<'a> Mul<&'a i32> for i32impl<'a, 'b> Mul<&'a i32> for &'b i32impl Mul for i64impl<'a> Mul<i64> for &'a i64impl<'a> Mul<&'a i64> for i64impl<'a, 'b> Mul<&'a i64> for &'b i64impl Mul for f32impl<'a> Mul<f32> for &'a f32impl<'a> Mul<&'a f32> for f32impl<'a, 'b> Mul<&'a f32> for &'b f32impl Mul for f64impl<'a> Mul<f64> for &'a f64impl<'a> Mul<&'a f64> for f64impl<'a, 'b> Mul<&'a f64> for &'b f64