Swift uses a strict left-to-right evaluation order in most situations. In this case, that causes the value of whole
to be copied before the other arguments to describe
are evaluated.
We’ve considered (CC @Andrew_Trick) changing the evaluation of this so that self
is not evaluated by copy but instead by immutable borrow, which in this case would cause this code to not compile due to an exclusivity error when the variable is modified while being immutably borrowed.