我在Rust中为简单的结构编写了以下代码。这只是一个例子,没有太多真实的逻辑:
struct Vec2 {
x: f32,
y: f32,
}
impl Vec2 {
fn multiply(&mut self, other: &Vec2) {
self.x *= other.x;
self.y *= other.y;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以创建简单的向量,然后将向量与另一个向量相乘,但是当我尝试将向量与自身向量相乘时遇到了一个问题:编译器抱怨我不能借用该向量,因为它也被借为不可变的。
fn main() {
let mut vec = Vec2 { x: 2.0, y: 2.3 };
vec.multiply(&vec);
}
Run Code Online (Sandbox Code Playgroud)
struct Vec2 {
x: f32,
y: f32,
}
impl Vec2 {
fn multiply(&mut self, other: &Vec2) {
self.x *= other.x;
self.y *= other.y;
}
}
Run Code Online (Sandbox Code Playgroud)
这是有道理的,但是将这样的向量与其自身相乘的正确方法是什么?更重要的是:对于一般情况,我需要使用自己的方法(使用与参数相同的结构)来修改结构。