我想创建一个不可变的、按引用的数据类型,并添加如下内容:
use std::ops::Add;
struct Point {
x: i64,
y: i64,
}
impl<'a> Add for &'a Point {
type Output = Point;
fn add(self, other: &Point) -> Point {
Point {
x: self.x + &other.x,
y: self.y + &other.y,
}
}
}
如何实现结构体引用的 Add 特征?建议实施Add
关于引用类型。
我可以做到这一点,在哪里a
and b
are Point
s:
let c = &a + &b;
let d = &c + &b;
但不是这个:
let d = &a + &b + &b;
我不介意&
迹象,但无法链接添加对我来说看起来不太好。我想实现乘法(z = a + b * c;
或者如果我必须的话z = &a + &b * &c;
),如果我不必创建临时变量,它看起来会更清晰。
有没有办法让它干净地工作?包围似乎没有帮助。
我明白发生了什么事&a + &b
给出一个Point
not a &Point
,这表明我可以同时实现add(&Point, Point)
and add(&Point, &Point)
- 但现在总共有 4 种情况可以让所有组合发挥作用a + b * c
and a * b + c
毕竟有不同的优先级/解析树。有更好的方法吗?
我还想避免在非参考版本中进行不必要的复制。无论如何,我都会返回一个新对象,因此首先克隆输入对我来说似乎是浪费时间。