Out of curiosity, why is `self` passed by value, instead of by reference?