4 ms·
I guess he is talking about traits. How do you 'functionize' them?
by ReleaseCandidat 5y ago
I guess he is talking about traits. How do you 'functionize' them?
- pornel 5y agoI wasn't thinking about traits when I wrote that, but you make a great point — that's a whole another way to design things. Maybe it could have been something fancy like: impl<T> Sound for T where T: Percussion<Accessory=Stick>
- hedgehog 5y agoThere's also the pattern used in from+into where one implementation is wrapped to provide its counterpart on the other type. Nice to read but feels a little extra magical for someone without a lot of Rust background.
- tialaramex 5y agoBlanket implementation is a very common idea in Rust. The standard library "owns" its own Traits and so it gets to provide blanket implementations for those, but you can do the same for your own. Here's (really, this is literally the code) how std provides a blanket implementation of Into given From: impl<T, U> Into<U> for T where U: From<T>, { fn into(self) -> U { U::from(self) } } There's actually a chain, From implies Into, Into implies TryFrom, then TryFrom implies TryInto.