Gotcha. But it is still pretty flexible in that you are not bound to the impls that were originally defined on the type (e.g. like C++/Java where the list of interfaces implemented by a class are fixed). This relieves one form writing wrapper classes in order for certain structs to adhere to particular interfaces.
-- Ziad On Tue, Nov 5, 2013 at 8:25 PM, Steven Blenkinsop <steven...@gmail.com>wrote: > Here you own the trait "Double". Doesn't work if you were trying to > implement a trait you hadn't just defined. The specific examples you > mentioned were Clone and Drop, so that wouldn't work. > > > On Tuesday, November 5, 2013, Ziad Hatahet wrote: > >> The following seems to work: >> >> trait Double { >> fn double(&self) -> Self; >> } >> >> impl Double for int { >> fn double(&self) -> int { >> *self * 2 >> } >> } >> >> fn main() { >> let x = 2; >> println!("{}", x.double()); // prints "4" >> } >> >> >> >> -- >> Ziad >> >> >> On Tue, Nov 5, 2013 at 1:29 PM, Steven Blenkinsop <steven...@gmail.com>wrote: >> >>> As long as "you" are the person who owns the type, yeah, but I suspect >>> that's not what you mean. Coherence requires that you only implement traits >>> for types if you own either the trait or the type (or both). You can't >>> implement a 3rd party trait for a 3rd party type, since then there could be >>> multiple such implementations for a given (trait, type) pair, and coherence >>> would be broken. >>> >>> >>> On Tue, Nov 5, 2013 at 2:28 PM, Ziad Hatahet <hata...@gmail.com> wrote: >>> >>>> On Tue, Nov 5, 2013 at 9:17 AM, Patrick Walton <pcwal...@mozilla.com>wrote: >>>> >>>>> On 11/5/13 2:44 AM, spir wrote: >>>>> >>>>>> Why not just add a declaration of the trait at the top of the struct >>>>>> type def? >>>>>> >>>>>> struct PairList<Val> : Iterable { >>>>>> >>>>> >>>>> You can implement traits on types that aren't structs. >>>> >>>> >>>> >>>> Isn't another effect of this is the ability to "monkey-patch" structs >>>> to implement extra methods or traits? E.g. you can later in implement a >>>> to_str() method for a type, or implement certain traits, like Clone or >>>> Drop. >>>> >>>> >>>> -- >>>> Ziad >>>> >>>> >>>> _______________________________________________ >>>> Rust-dev mailing list >>>> Rust-dev@mozilla.org >>>> https://mail.mozilla.org/listinfo/rust-dev >>>> >>>> >>> >>
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev