我有一个简单的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)
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)
该答案说明了为什么需要这样做。
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |