Z tutorial on borrowed pointers (łamany), nieco zmodyfikowany:Czy mogę pożyczyć wskaźnik do wspólnej cechy w Rust?
struct Point {x: float, y: float}
fn compute(p1 : &Point) {}
fn main() {
let shared_box : @Point = @Point {x: 5.0, y: 1.0};
compute(shared_box);
}
I wszystko jest w porządku, ponieważ wspólna skrzynka jest automatycznie pożyczył dla funkcji.
Ale robi to samo z cechą:
struct Point {x: float, y: float}
trait TPoint {}
impl TPoint for Point {}
fn compute(p1 : &TPoint) {}
fn main() {
let shared_box : @TPoint = @Point {x: 5.0, y: 1.0} as @TPoint;
compute(shared_box);
// ^~~~~~~ The error is here
}
I to się nie powiedzie, (kompilator wersji 0.6) mówiąc:
error: mismatched types: expected
&TPoint
but found@TPoint
(trait storage differs: expected & but found @)
Jest to błąd w kompilator? Czy pożyczone wskaźniki nie są dozwolone dla cech?
Jeśli odpowiedź jest druga, dlaczego tak jest?
Jestem trochę zaskoczony komunikatem o błędzie, który zgłosiłeś, ponieważ pracujesz z @TPoint i & TPoint w kodzie, ale komunikat o błędzie zgłasza problem z ~ TPoint i & TPoint. (Podejrzewam błąd transkrypcji, który możesz poprawić.) – pnkfelix
@pnkfelix: Rzeczywiście, poprawiono. To samo dzieje się z '~ TPoint', ale wiadomość nie odpowiada kodowi. – rodrigo