将代码拆分为文件时,无法实现特征

Kai*_*ren 4 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());
Run Code Online (Sandbox Code Playgroud)

它可以打印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());
Run Code Online (Sandbox Code Playgroud)

我收到编译错误:

错误:类型a::A在命名范围内未实现任何方法bar

我有点不解。

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

amg*_*era 5

B每当要在实现它的对象上调用其方法时,特质都必须在范围内。您可能忘记了导入B使用的文件A

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

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

答案说明了为什么需要这样做。