WasTabon
@WasTabon

Зачем писать .to_string() при объявлении строки?

fn m(){

    let s1 = "hello".to_string();   // s1 - владелец строки "hello"
    println!("s1: {}", s1);

    let s2 = s1;                    // меняем владельца строки на s2

    println!("s1: {}", s1);         // !Ошибка - s1 теперь нельзя использовать
    println!("s2: {}", s2);
}

Типо если делать приставку .to_string() то надо ещё и когда присваиваешь значение переменной дописывать &
Но если без неё, то & необязательно. Так вот зачем это надо все?
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Есть хорошая статья: https://habr.com/ru/post/274485/

У строковых литералов тип &'static str. Тоесть это заимствованная ссылка на объект с неограниченным временем жизни.
А to_string возвращает уже owned строку типа std::string::String

А нужно это в данном коде, чтобы показать механику владения, что очевидно нельзя, если никто не является владельцем значений, как в случае со ссылками.

Если ты хочешь получить именно String из строкового литерала, то есть сразу несколько вариантов, включая показанный:
let a: String = String::from("a");
let b: String = "b".to_string();
let c: String = "c".into(); // или "c".into::<String>(), если не указывать тип явно.
let d: String = "d".to_owned();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@deliro
https://qna.habr.com/q/1105214#answer_2097786

Раздел Strings in Rust
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы