4 ms·
the rust traits are not overloading though (at least not in the same way as swift), that’s just implementing a trait on a type. I think the distinction is that
by adamwk 2y ago
the rust traits are not overloading though (at least not in the same way as swift), that’s just implementing a trait on a type. I think the distinction is that with traits or protocols you get a lot of expressivity, reducing the need for overloading
- lamontcg 2y agoYou can still create your own vec3 though that implements "<vec3> * <double>" through the Trait... It seems at least superficially equivalent to operator overloading.
- fauigerzigerk 2y agoIt is operator overloading. Traits are just the mechanism to do operator overloading in Rust. But I think what matters in this particular context is that Rust does not support function overloading and this restriction also applies to functions implementing operators. I think this may be why the parent comment claims that it is not really overloading. The meaning of "overloading" is a bit ambiguous here. So for a concrete type vec3 you cannot define both <vec3> * <double> and <vec3> * <vec3>, which makes type inference a lot easier. It also makes Rust operator overloading less expressive.
- yorwba 2y agoYou can define multiple implementations for the Mul trait with different right-hand sides, no problem at all. https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=f4037fa7e0e0236fa1f226a585150d71 https://play.rust-lang.org/?version=stable&mode=debug&editio...
- fauigerzigerk 2y agoThanks, I didn't know that. In light of this, would you say that there is any sense in which Rust doesn't support the full extent of what is usually called operater overloading?
- lamontcg 2y agoI'm not who responded to you, but I think the important difference from some other languages is you can't define arbitrary operators, but there does seem to be Traits for overloading at least most of the built-in operators.