Hey folks, A work colleague is trying to pick up some Rust & we were both surprised by the following:
// some_mod.rs pub trait SomeTrait { pub fn foo(&self) -> ~str; } pub struct SomeStruct { name: ~str } impl SomeTrait for SomeStruct { pub fn foo(&self) -> ~str { self.name.clone() } } impl SomeStruct { pub fn new(name: &str) -> SomeStruct { SomeStruct { name: name.to_owned() } } } // some_use.rs mod some_mod; fn main() { let inst = some_mod::SomeStruct::new("test"); println(inst.foo()); } This fails with a compile error because the compiler can't "see" some_mod::SomeTrait in the scope of some_use.rs: some_use.rs:5:4: 6:1 error: type `some_mod::SomeStruct` does not implement any method in scope named `foo` some_use.rs:5 inst.foo() some_use.rs:6 } This is fixed by adding "use some_mod::SomeTrait" at the start of some_use.rs. It's as though traits need to be in the same scope as code that expects to make use of their behaviour (where I'd expect the behaviour would be associated with the implementation for the "self" type). My question is: is this intended behaviour? If not, what's the expected behaviour & is there an outstanding issue for this? Appreciate any clarification! Cheers, Tom -- Tom Lee / http://tomlee.co / @tglee _______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev