Vom tutorial on borrowed pointers (gebrochen), ein wenig geändert:Kann ich in Rust einen Zeiger auf ein gemeinsames Merkmal ausleihen?
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);
}
Und das alles ist in Ordnung, weil das gemeinsame Feld automatisch für die Funktion ausgeliehen wird.
Aber das gleiche mit einem Zug tun:
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
}
Und es fehlschlägt, (Compiler Version 0.6) sagen:
error: mismatched types: expected
&TPoint
but found@TPoint
(trait storage differs: expected & but found @)
Ist das ein Bug im Compiler? Oder sind geliehene Zeiger für Merkmale nicht erlaubt?
Wenn die Antwort die letztere ist, warum ist das?
Ich bin etwas überrascht von der Fehlermeldung, die Sie gemeldet haben, da Sie mit @TPoint und & TPoint im Code arbeiten, aber die Fehlermeldung meldet ein Problem mit ~ TPoint und & TPoint. (Ich vermute einen Übertragungsfehler, den Sie vielleicht korrigieren möchten.) – pnkfelix
@pnkfelix: In der Tat korrigiert. Das gleiche passiert mit '~ TPoint', aber die Nachricht entsprach nicht dem Code. – rodrigo