Як перетворити з цілого числа у рядок?


88

Я не можу скомпілювати код, який перетворює тип із цілого числа у рядок. Я запускаю приклад із підручника Rust for Rubyists, який має різні перетворення типів, такі як:

"Fizz".to_str()і num.to_str()(де numціле число).

Я думаю, що більшість (якщо не всі) цих to_str()викликів функцій застаріли. Яким є поточний спосіб перетворення цілого числа у рядок?

Помилки, які я отримую:

error: type `&'static str` does not implement any method in scope named `to_str`
error: type `int` does not implement any method in scope named `to_str`

вибачте, якщо я не стежу, але я спробував знайти джерело int, і, схоже, використовую doc.rust-lang.org/0.11.0/std/num/strconv/index.html, але це просто повертає вектор байта . Крім того, існує to_string()метод, але який повертає, Stringа не буквальний рядок.
user3358302

ха-ха, нічого, я думав, to_str()це інше значення повернення, я буду використовуватиto_string()
user3358302

1
@ user3358302, жоден метод не може повернути річ, яку ви називаєте "літеральним рядком", якщо вони не повертають статично відомі літерали, оскільки ці значення мають тип &'static str, тобто фрагмент рядка зі статичним часом життя, який неможливо отримати за допомогою динамічно створених даних. Ви можете створити їх лише за допомогою рядкових літералів.
Володимир Матвєєв

добре знати! Я думаю, що метод to_strзбентежив мене (яку, як ви вже сказали, вони перейменували для ясності), думаючи, що він повертає фрагмент рядка замість Stringоб’єкта.
user3358302

Відповіді:


123

Використовуйте to_string()( запущений приклад тут ):

let x: u32 = 10;
let s: String = x.to_string();
println!("{}", s);

Ти маєш рацію; to_str()було перейменовано на to_string()до випуску Rust 1.0 для узгодженості, оскільки тепер називається виділений рядок String.

Якщо вам потрібно десь передати фрагмент рядка, вам потрібно отримати &strпосилання від String. Це можна зробити за допомогою &і примусу, що не застосовується:

let ss: &str = &s;   // specifying type is necessary for deref coercion to fire
let ss = &s[..];     // alternatively, use slicing syntax

Підручник, до якого ви зв’язали, здається застарілим. Якщо вас цікавлять рядки в Rust, ви можете переглянути розділ рядків мови програмування Rust .


1
Велике спасибі, людино, це прояснює ситуацію :) Також я пройду цей підручник, оскільки перетворення рядків здається чимось, що все ще змінюється на іржі.
user3358302
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.