假设我有以下结构:
struct Vector {
data: [f32; 2]
}
Run Code Online (Sandbox Code Playgroud)
实现 Index 特征很容易:
impl IndexMut<usize> for Vector {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
&mut self.data[index]
}
}
Run Code Online (Sandbox Code Playgroud)
我也有这个实现:
impl Vector {
fn x(&mut self) -> &mut T {
&mut self.data[0]
}
fn y....
}
Run Code Online (Sandbox Code Playgroud)
从技术上讲,我可以做到这一点,但每次我想实际设置 x() 的值时,我都需要取消引用它:可以*v.x() = 7
工作,但我v.x() = 7
也想工作。
当我尝试第二个时,我收到错误:consider dereferencing here to assign to the mutably borrowed value: '*'
,我认为这是有道理的,但发生这种情况很奇怪,因为 IndexMut 返回与我的 x() 函数返回的相同的可变引用。
所以我的问题是:为什么 IndexMut 特征只适用于 do v[0] = …