Я просматривал второе издание электронной книги по Rust и в фрагменте кода из связанной главы, если я удалю оператор ссылки (&
) в строке 3, программа все равно будет работать отлично.
let mut s1 = String::from("foo");
let s2 = "bar";
s1.push_str(&s2); // here
println!("s2 is {}", s2);
Значение s2
должно быть перемещено в соответствии с книгой. Однако, если я изменю
s1.push_str(&s2);
to
s1.push_str(s2);
следующая строка должна вызвать ошибку, но этого не происходит:
println!("s2 is {}", s2);
Фрагмент из документации:
Листинг 8-16: Использование фрагмента строки после добавления его содержимого к строке Если бы метод push_str стал владельцем s2, мы не смогли бы распечатать его значение в последней строке. Однако этот код работает так, как мы и ожидали!
Я использую Rust 1.24.1.