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

88

Я не могу скомпилировать код, преобразующий тип из целого числа в строку. Я использую пример из учебника Rust для 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`
user3358302
источник
извините, если я не следую, но я попытался найти источник 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. Это можно сделать с помощью &и приведения deref:

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

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

Владимир Матвеев
источник
1
Большое спасибо, чувак, это проясняет ситуацию :) Также я пройдусь по этому руководству, так как преобразование строк кажется чем-то, что все еще меняется на ржавчине.
user3358302