full_name
не использует self
, он использует ссылку через &self
: элементы используются только через ссылки в качестве аргументов для format!()
, поэтому ссылка достаточна.
to_tuple
(как следует из названия to_...
) потребляет self
: перемещает членов из self
в возвращаемый кортеж.Поскольку исходный self
больше не является действительной памятью после перемещения (self
больше не владеет памятью), его необходимо использовать, следовательно, перемещение через self
.
Вы можете изменить full_name
использовать self
, то есть переместить владение.Это стало бы неудобным, поскольку вызов функции потреблял бы структуру без необходимости.
to_tuple
можно было бы изменить, чтобы она не потребляла self
, однако для этого потребуется .clone()
(сделатькопия) членов, что дорого.