# Trait std::ops::IndexMut 1.0.0 [−] [src]

    pub trait IndexMut<Idx>: Index<Idx> where Idx: ?Sized {
        fn index_mut(&mut self, index: Idx) -> &mut Self::Output;
    }

The `IndexMut` trait is used to specify the functionality of indexing operations like `arr[idx]`, when used in a mutable context.

# Examples

A trivial implementation of `IndexMut`. When `Foo[Bar]` happens, it ends up calling `index_mut`, and therefore, `main` prints `Indexing!`.

use std::ops::{Index, IndexMut}; #[derive(Copy, Clone)] struct Foo; struct Bar; impl Index<Bar> for Foo { type Output = Foo; fn index<'a>(&'a self, _index: Bar) -> &'a Foo { self } } impl IndexMut<Bar> for Foo { fn index_mut<'a>(&'a mut self, _index: Bar) -> &'a mut Foo { println!("Indexing!"); self } } fn main() { &mut Foo[Bar]; }

    use std::ops::{Index, IndexMut};

    #[derive(Copy, Clone)]
    struct Foo;
    struct Bar;

    impl Index<Bar> for Foo {
        type Output = Foo;

        fn index<'a>(&'a self, _index: Bar) -> &'a Foo {
            self
        }
    }

    impl IndexMut<Bar> for Foo {
        fn index_mut<'a>(&'a mut self, _index: Bar) -> &'a mut Foo {
            println!("Indexing!");
            self
        }
    }

    fn main() {
        &mut Foo[Bar];
    }

## Required Methods

### `fn index_mut(&mut self, index: Idx) -> &mut Self::Output`

The method for the indexing (`Foo[Bar]`) operation

## Implementors

- `impl<T> IndexMut<usize> for [T]`
- `impl<T> IndexMut<Range<usize>> for [T]`
- `impl<T> IndexMut<RangeTo<usize>> for [T]`
- `impl<T> IndexMut<RangeFrom<usize>> for [T]`
- `impl<T> IndexMut<RangeFull> for [T]`
- `impl<T> IndexMut<RangeInclusive<usize>> for [T]`
- `impl<T> IndexMut<RangeToInclusive<usize>> for [T]`
- `impl IndexMut<Range<usize>> for str`
- `impl IndexMut<RangeTo<usize>> for str`
- `impl IndexMut<RangeFrom<usize>> for str`
- `impl IndexMut<RangeFull> for str`
- `impl IndexMut<RangeInclusive<usize>> for str`
- `impl IndexMut<RangeToInclusive<usize>> for str`
- `impl IndexMut<Range<usize>> for String`
- `impl IndexMut<RangeTo<usize>> for String`
- `impl IndexMut<RangeFrom<usize>> for String`
- `impl IndexMut<RangeFull> for String`
- `impl IndexMut<RangeInclusive<usize>> for String`
- `impl IndexMut<RangeToInclusive<usize>> for String`
- `impl<T> IndexMut<usize> for Vec<T>`
- `impl<T> IndexMut<Range<usize>> for Vec<T>`
- `impl<T> IndexMut<RangeTo<usize>> for Vec<T>`
- `impl<T> IndexMut<RangeFrom<usize>> for Vec<T>`
- `impl<T> IndexMut<RangeFull> for Vec<T>`
- `impl<T> IndexMut<RangeInclusive<usize>> for Vec<T>`
- `impl<T> IndexMut<RangeToInclusive<usize>> for Vec<T>`
- `impl<A> IndexMut<usize> for VecDeque<A>`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)