<div dir="ltr">Matthew Monrocq suggests this improvement, which looks even cleaner to use, although slightly more complicated to implement generation of:<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jun 11, 2014 at 11:38 AM, Matthieu Monrocq <span dir="ltr"><<a href="mailto:matthieu.monrocq@gmail.com" target="_blank">matthieu.monrocq@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">[snip]<br><div class="gmail_extra"><div class="">
<div class="gmail_quote"><br></div></div><div class="gmail_quote">
I do like the idea of the trait, however I would rather do away with all the `get_aa`: why not directly wrap the parameters ?<br><br>    enum AaBbEnum {<br>        Aa(int, f64),<br>        Bb(f64),<br>    }<br>    trait AaBb {<br>

        fn get(&self) -> AaBbEnum;<div class=""><br>    }<br><br>    impl AaBb for (int, f64) {<br></div>        fn get(&self) -> AaBbEnum { match *self { (i, f) => Aa(i, f), } }<br>    }<br><br>    impl AaBb for (f64) {<br>

        fn get(&self) -> AaBbEnum { Bb(*self) }<div class=""><br>    }<br>    <br>    fn overloaded<T: AaBb>(x: T) {<br></div>        match x.get() {<br>            Aa(i, f) => println!("got Aa: {}", (i, f)),<br>
            Bb(f) => println!("got Bb: {}", f),<div class=""><br>
        }<br>    }<br>    <br>    #[main]<br>    fn main() {<br>        overloaded((5i, 7.3243)); // prints: got Aa: (5, 7.3243)<br>        overloaded((3.5)); // prints: got Bb: 3.5<br>    }<br><br></div></div><div class="gmail_quote">

Now, there is no runtime failure => you cannot accidentally match on `Bb` and requests `get_aa`!</div></div></div></blockquote><div><br></div><div><br></div><div><br></div><div>Kevin <br></div></div><br></div></div>