Как мне преобразовать целое число в строку?

#rust

#строка #инт #преобразование типов #Ржавчина

Вопрос:

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

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

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

Ошибки, которые я получаю, следующие:

 error: type `amp;'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`
 

Комментарии:

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

2. ха-ха, неважно, я думал to_str() , что это другое возвращаемое значение, я буду использовать to_string()

3. @user3358302, ни один метод не может вернуть то, что вы называете «буквальной строкой», если они не возвращают статически известные литералы, потому что эти значения имеют тип amp;'static str , то есть фрагмент строки со статическим временем жизни, который невозможно получить с помощью динамически созданных данных. Вы можете создавать их только с помощью строковых литералов.

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

Ответ №1:

Используйте to_string() (запуск примера здесь):

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

Вы правы; to_str() был переименован в to_string() перед выпуском Rust 1.0 для обеспечения согласованности, потому что теперь вызывается выделенная строка String .

Если вам нужно куда-то передать фрагмент строки, вам нужно получить amp;str ссылку из String . Это можно сделать с помощью amp; и принудительного удаления:

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

Учебное пособие, на которое вы ссылались, кажется устаревшим. Если вас интересуют строки в Rust, вы можете просмотреть главу strings языка программирования Rust.

Комментарии:

1. Большое спасибо, чувак, это проясняет ситуацию 🙂 Также я пройдусь по этому руководству, поскольку преобразование строк похоже на то, что все еще меняется в rust.