Module std::ops
[−]
[src]
Overloadable operators.
Implementing these traits allows you to get an effect similar to overloading operators.
Some of these traits are imported by the prelude, so they are available in every Rust program.
Many of the operators take their operands by value. In non-generic
contexts involving built-in types, this is usually not a problem.
However, using these operators in generic code, requires some
attention if values have to be reused as opposed to letting the operators
consume them. One option is to occasionally use clone()
.
Another option is to rely on the types involved providing additional
operator implementations for references. For example, for a user-defined
type T
which is supposed to support addition, it is probably a good
idea to have both T
and &T
implement the traits Add<T>
and Add<&T>
so that generic code can be written without unnecessary cloning.
Examples
This example creates a Point
struct that implements Add
and Sub
, and
then demonstrates adding and subtracting two Point
s.
use std::ops::{Add, Sub}; #[derive(Debug)] struct Point { x: i32, y: i32, } impl Add for Point { type Output = Point; fn add(self, other: Point) -> Point { Point {x: self.x + other.x, y: self.y + other.y} } } impl Sub for Point { type Output = Point; fn sub(self, other: Point) -> Point { Point {x: self.x - other.x, y: self.y - other.y} } } fn main() { println!("{:?}", Point {x: 1, y: 0} + Point {x: 2, y: 3}); println!("{:?}", Point {x: 1, y: 0} - Point {x: 2, y: 3}); }
See the documentation for each trait for a minimum implementation that prints something to the screen.
Structs
Range |
A (half-open) range which is bounded at both ends: { x | start <= x < end }.
Use |
RangeFrom |
A range which is only bounded below: { x | start <= x }.
Use |
RangeFull |
An unbounded range. Use |
RangeTo |
A range which is only bounded above: { x | x < end }.
Use |
RangeToInclusive |
[Unstable] An inclusive range which is only bounded above: { x | x <= end }.
Use |
Enums
RangeInclusive |
[Unstable] An inclusive range which is bounded at both ends: { x | start <= x <= end }.
Use |
Traits
Add |
The |
AddAssign |
The |
BitAnd |
The |
BitAndAssign |
The |
BitOr |
The |
BitOrAssign |
The |
BitXor |
The |
BitXorAssign |
The |
Deref |
The |
DerefMut |
The |
Div |
The |
DivAssign |
The |
Drop |
The |
Fn |
A version of the call operator that takes an immutable receiver. |
FnMut |
A version of the call operator that takes a mutable receiver. |
FnOnce |
A version of the call operator that takes a by-value receiver. |
Index |
The |
IndexMut |
The |
Mul |
The |
MulAssign |
The |
Neg |
The |
Not |
The |
Rem |
The |
RemAssign |
The |
Shl |
The |
ShlAssign |
The |
Shr |
The |
ShrAssign |
The |
Sub |
The |
SubAssign |
The |
BoxPlace |
[Unstable] Specialization of |
Boxed |
[Unstable] Core trait for the |
CoerceUnsized |
[Unstable] Trait that indicates that this is a pointer or a wrapper for one, where unsizing can be performed on the pointee. |
InPlace |
[Unstable] Specialization of |
Place |
[Unstable] Both |
Placer |
[Unstable] Interface to implementations of |