You cannot overload assignment. Moving a variable from one location to another is a core component of Rust's ownership semantics and is not overridable.
Another answer suggests that you custom-implement the Copy
trait. This makes no sense, as there's nothing to implement:
pub trait Copy: Clone { }
You could implement Clone
for a type, but to use clone
you have to call it explicitly:
let foo = bar.clone();
The actual assignment is still just copying bits from the right-hand side to the left-hand side, the only difference is that you don't give up ownership of bar
.
If your type can be duplicated by simply copying bits, then it's appropriate to implement Copy
. If it can be duplicated by executing some kind of function, then it's appropriate to implement Clone
. There is no way I know of to implicitly execute code at any given assignment of a type (and I count that as a good thing).