@TicSo

Как пояснить работу с типом &str?

Почему второй вариант из кода ниже не работает
и можно ли сделать конкатенацию в одну строку кода:
fn main() {
    
    let mut s: &str = "x";
    println!("1. {:?}", s);   // "x"

    // вариант 1:
    let b = s.to_string() + "y";
    s = &b;

    // вариант 2.1:
    // s = (s.to_string() + "z").as_str();
    // или
    // вариант 2.2: 
    // s = &(s.to_string() + "z");
    //
    println!("2. {:?}", s);   // "xy"
}
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
vabka
@vabka Куратор тега Rust
Для конкатенации строк нужно одно из двух:
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"
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы