let country = String::from("Austria");
adds_hungary(country);
}
fn adds_hungary(mut country: String) {
country.push_str("-Hungary");
println!("{}", country);
}
Немутабельна переменная country передается в функцию, где затеняется на мутабельную? И теперь только функция имеет право владения этой переменой, а main уже нет?
В данном примере из main передается владение в adds_hungary а то что mut это тоже самое что fn main() { let country = String::from("Austria"); let mut country = country; }
Возможно вы хотели такого поведения? fn main() { let mut country = String::from("Austria"); adds_hungary(&mut country); println!("{}", country); } fn adds_hungary(country: &mut String) { country.push_str("-Hungary"); }
Тогда разница лишь в том, что таким макаром можно передавать в функцию немутабульную переменную, делая ее мутабельной. Это не клонирует строку? Или это нужно делать напрямую через .clone()?
Я бы сказал так: сигнатура функции предусматривает передачу по значению. Передача по значению не-copy типов инвалидирует предыдущую переменную. Строка(сами данные) не клонируется. Если нужно сохранить старую строку - передаем country.clone()
Обсуждают сегодня