将代码拆分为文件时,实现特征不起作用

时间:2014-09-12 19:38:19

标签: rust

模块化代码时出现了一个简单的Rust问题。

以下作品:

pub trait B {
    fn bar(&self) -> int;
}

pub struct A {
    foo: int
}

impl B for A {
    fn bar(&self) -> int { 5 }
}

// Later...
let a = A { foo: 5 };
println!("{}", a.bar());

它打印5,但只要我模块化代码:

// lib.rs
mod a;
mod b;

// b.rs
pub trait B {
    fn bar(&self) -> int;
}

// a.rs
use b::B;

pub struct A {
    foo: int
}

impl B for A {
    fn bar(&self) -> int { 5 }
}

// Anywhere:
let test = a::A { foo: 5 };
println!("{}", test.bar());

我收到编译错误:

  

错误:类型a::A未在名为bar

的范围内实现任何方法

我有点疑惑。

我正在使用:rustc 0.12.0-pre-nightly (0bdac78da 2014-09-01 21:31:00 +0000)

1 个答案:

答案 0 :(得分:4)

只要您想在实现它的对象上调用其方法,

特征B必须在范围内。您可能忘记将B导入到使用A的文件中:

// At the top:
use b::B;

// Anywhere:
let test = a::A { foo: 5 };
println!("{}", test.bar());

This回答解释了为什么需要这样做。