本文简要介绍rust语言中 Trait std::ops::IndexMut
的用法。
用法
pub trait IndexMut<Idx>: Index<Idx> where Idx: ?Sized, {
fn index_mut(&mut self, index: Idx) -> &mut Self::Output;
}
用于可变上下文中的索引操作 (container[index]
)。
container[index]
实际上是 *container.index_mut(index)
的语法糖,但仅在用作可变值时。如果请求不可变值,则使用 Index
特征。这允许诸如 v[index] = value
之类的好东西。
例子
Balance
结构的一个非常简单的实现,它有两个边,每个边都可以被可变和不可变地索引。
use std::ops::{Index, IndexMut};
#[derive(Debug)]
enum Side {
Left,
Right,
}
#[derive(Debug, PartialEq)]
enum Weight {
Kilogram(f32),
Pound(f32),
}
struct Balance {
pub left: Weight,
pub right: Weight,
}
impl Index<Side> for Balance {
type Output = Weight;
fn index(&self, index: Side) -> &Self::Output {
println!("Accessing {:?}-side of balance immutably", index);
match index {
Side::Left => &self.left,
Side::Right => &self.right,
}
}
}
impl IndexMut<Side> for Balance {
fn index_mut(&mut self, index: Side) -> &mut Self::Output {
println!("Accessing {:?}-side of balance mutably", index);
match index {
Side::Left => &mut self.left,
Side::Right => &mut self.right,
}
}
}
let mut balance = Balance {
right: Weight::Kilogram(2.5),
left: Weight::Pound(1.5),
};
// In this case, `balance[Side::Right]` is sugar for
// `*balance.index(Side::Right)`, since we are only *reading*
// `balance[Side::Right]`, not writing it.
assert_eq!(balance[Side::Right], Weight::Kilogram(2.5));
// However, in this case `balance[Side::Left]` is sugar for
// `*balance.index_mut(Side::Left)`, since we are writing
// `balance[Side::Left]`.
balance[Side::Left] = Weight::Kilogram(3.0);
相关用法
- Rust IndexMut用法及代码示例
- Rust Index用法及代码示例
- Rust IntoKeys用法及代码示例
- Rust IntoIter.as_mut_slice用法及代码示例
- Rust Infallible用法及代码示例
- Rust IntErrorKind用法及代码示例
- Rust Intersection用法及代码示例
- Rust IntoInnerError.error用法及代码示例
- Rust Into用法及代码示例
- Rust Incoming用法及代码示例
- Rust IntoIter.new用法及代码示例
- Rust Instant.checked_duration_since用法及代码示例
- Rust IntoValues用法及代码示例
- Rust IntoIterator.into_iter用法及代码示例
- Rust Instant.now用法及代码示例
- Rust IntoInnerError.into_inner用法及代码示例
- Rust Instant.saturating_duration_since用法及代码示例
- Rust IntoInnerError.into_parts用法及代码示例
- Rust IntoIter.as_slice用法及代码示例
- Rust IntoIterator用法及代码示例
- Rust IntoIter用法及代码示例
- Rust Instant.duration_since用法及代码示例
- Rust IntoRawFd.into_raw_fd用法及代码示例
- Rust IntoInnerError.into_error用法及代码示例
- Rust Instant用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait std::ops::IndexMut。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。