このコードを考えると(ここでも):
struct Vector2 {
x: int,
y: int
}
impl Vector2 {
pub fn new(xs: int, ys: int) -> Vector2 {
Vector2 {
x: xs,
y: ys
}
}
fn add(&self, otr: Vector2) -> &Vector2 {
self.x += otr.x; // cannot assign to immutable field (line 15)
self.y += otr.y; // cannot assign to immutable field (line 16)
return self; // lifetime mismatch (line 17)
}
}
fn main() {
let mut vec1 = Vector2::new(42, 12);
println(fmt!("vec1 = [x: %?, y: %?]", vec1.x, vec1.y));
let vec2 = Vector2::new(13, 34);
println(fmt!("vec2 = [x: %?, y: %?]", vec2.x, vec2.y));
let vec3 = vec1.add(vec2);
println(fmt!("vec1 + vec2 = [x: %?, y: %?]", vec3.x, vec3.y))
}
15 ~ 17 行目に問題があります。
15 行目と 16 行目で、これら 2 つの変数を変更する最善の方法を誰か説明できますか? 正しく使用していないか、どこか self
が欠けているようです。mut
17行目では、次のようlifetime mismatch
にも言っています。
タイプの不一致: '&Vector2' が予期されていましたが、'&Vector2' が見つかりました... 14:41 にブロックで定義された匿名の有効期間 #1 は、14:41 でブロックに定義された匿名の有効期間 #2 よりも長生きするとは限りません。
これら2つの問題を解決する方法を知っている人はいますか?