2013-05-02 3 views
6

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?

+0

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

+0

@pnkfelix: In der Tat korrigiert. Das gleiche passiert mit '~ TPoint', aber die Nachricht entsprach nicht dem Code. – rodrigo

Antwort

Verwandte Themen