Когда T: Copy
, то так же Option<T>
. Это означает, что при передаче его в качестве аргумента функции:
take_inner(opt2);
фактически скопирует данные. Если бы T
не было Copy
, то ничего из этого не сработало бы, потому что вместо этого было бы перемещено , поэтому вы даже не могли бы напечатать его позже.
Если вы передадите его в качестве изменяемой ссылки, то функция может изменить исходное значение:
fn take_inner(opt: &mut Option<u8>) {
opt.take();
};
take_inner(&mut opt2);