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 类型

已经有一些工作试图解决这个问题,但有一些技术细节需要解决;感兴趣的各方可以在 pull request 4178 上看到一些讨论(几个月前)。

于 2013-05-02T23:48:36.353 回答