7

借用ポインター (壊れた) に関するチュートリアルから、少し変更しました。

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);
}

共有ボックスは機能のために自動的に借りられるため、すべて問題ありません。

しかし、トレイトで同じことを行います:

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
}

そして、失敗します(コンパイラバージョン0.6):

エラー: 型の不一致: 予期され&TPointたが見つかりました@TPoint(特性ストレージが異なります: 予期された & が見つかりました @)

これはコンパイラのバグですか? または、借用したポインターは特性に許可されていませんか?

答えが後者なら、それはなぜですか?

4

1 に答える 1

4

これは、Rust の現在のバージョンの既知のバグです。

#3794: トレイトへのキャストが &T 型に自動強制変換されない

この問題に対処するためにいくつかの作業が行われましたが、解決する必要のある技術的な詳細がいくつかあります。興味のある方は、プルリクエスト 4178 で(数か月前の) 議論の一部を見ることができます。

于 2013-05-02T23:48:36.353 に答える