Для конкатенации строк нужно одно из двух:
1. Одна из строк должна быть String, а не &str и тогда ты просто добавляешь к ней вторую
2. Ты должнен в процессе конкатенации создавать новый String.
А второй вариант у тебя не работает из-за того что ты дропаешь String, который был создан при конкатенации.
Первый вариант имхо не очень читабельный получился. Лучше попробуй вот так:
fn main() {
let a = "x";
println!("1. {:?}", a); // "x"
let b = format!("{}y", a);
println!("2. {:?}", b); // "xy"
}
Либо:
fn main() {
let mut s = "x".to_string();
println!("1. {}", s); // "x"
s += "y";
println!("2. {}", s); // "xy"
}