我可以在Rust中借用指向共享特征的指针吗?

时间:2013-05-02 19:19:13

标签: rust rust-obsolete

tutorial on borrowed pointers(破碎),稍作修改:

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(特质存储不同:预期&但发现@)

这是编译器中的错误吗?或者是借用了不允许使用特征的指针?

如果答案是后者,为什么会这样?

1 个答案:

答案 0 :(得分:3)

这是当前版本的Rust中的一个已知错误:

#3794: Casting to a trait doesn't auto-coerce to a &T type

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