从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
(特质存储不同:预期&但发现@)
这是编译器中的错误吗?或者是借用了不允许使用特征的指针?
如果答案是后者,为什么会这样?
答案 0 :(得分:3)
这是当前版本的Rust中的一个已知错误:
#3794: Casting to a trait doesn't auto-coerce to a &T type
有一些尝试解决这个问题的工作,但有些技术细节需要解决;感兴趣的各方可以看到一些讨论(几个月前)here on pull request 4178。