我想做出與另外一個不可改變的,引用的數據類型有點像這樣:如何爲參考類型實現添加以便我可以一次添加兩個以上的值?
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,
}
}
}
How do I implement the Add trait for a reference to a struct?建議在引用類型實施Add
。
我能做到這一點,其中a
和b
是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
不是&Point
,這表明我可以同時實現add(&Point, Point)
和add(&Point, &Point)
- 總共但是現在有4例獲得所有組合的工作,因爲a + b * c
和a * b + c
有不同的優先級/畢竟解析樹木。有更好的方法嗎?
我也想避免在非參考版本中不必要的複製。無論如何,我都會返回一個新對象,所以首先克隆輸入對我來說似乎浪費時間。