2013-05-02 5 views
6

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?

+0

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

+0

@pnkfelix: Rzeczywiście, poprawiono. To samo dzieje się z '~ TPoint', ale wiadomość nie odpowiada kodowi. – rodrigo

Odpowiedz