Насколько я понимаю, если у меня есть такая функция:
fn f(x: Vec<u32>) -> (some result)
f
становится владельцем x
. f
теперь несет ответственность за уничтожение x
.
Если это так, могу ли я изменить x
, и если да, то как? Чтобы получить изменяемый итератор для x
, требуется &mut
, которого у меня нет.
Кажется разумным, чтобы я мог изменять переменную, владельцем которой я теперь являюсь, без каких-либо вредных последствий. Я просто не уверен, как это сделать. Вызывающая функция отказалась от владения x
до f
, поэтому ей не важно, что с ней происходит.
Возможно, я мог бы изменить тип f
на f(x: &mut Vec<u32>)
, но я действительно не хочу этого делать по разным причинам, например, это предотвращает естественное соединение функций типа f(g(x))
, а также если мой "(некоторый результат)" отличается от Vec<u32>
(например, типа, содержащего Vec<u32>
), тогда мне придется разделить функцию на две части и убедиться, что вызывающая сторона делает то, что должна ,