模块化代码时出现了一个简单的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)
答案 0 :(得分:4)
特征B
必须在范围内。您可能忘记将B
导入到使用A
的文件中:
// At the top:
use b::B;
// Anywhere:
let test = a::A { foo: 5 };
println!("{}", test.bar());
This回答解释了为什么需要这样做。