Como faço para converter de um inteiro em uma string?

87

Não consigo compilar o código que converte um tipo de inteiro em string. Estou executando um exemplo do tutorial Rust for Rubyists que tem várias conversões de tipo, como:

"Fizz".to_str()e num.to_str()(onde numé um número inteiro).

Acho que a maioria (se não todas) dessas to_str()chamadas de função foi descontinuada. Qual é a maneira atual de converter um inteiro em uma string?

Os erros que estou recebendo são:

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
fonte
desculpe se não entendi, mas tentei pesquisar a fonte int e parece usar doc.rust-lang.org/0.11.0/std/num/strconv/index.html, mas isso apenas retorna um vetor de bytes . Além disso, existe o to_string()método mas que retorna Stringe não uma string literal.
user3358302
haha deixa pra lá, pensei que to_str()era um valor de retorno diferente, vou usarto_string()
user3358302
1
@ user3358302, nenhum método pode retornar algo que você chama de "string literal", a menos que retornem literais estaticamente conhecidos porque esses valores têm tipo &'static str, ou seja, uma fatia de string com um tempo de vida estático, que é impossível de obter usando dados criados dinamicamente. Você só pode criá-los usando literais de string.
Vladimir Matveev
bom saber! Acho que o método to_strme confundiu (que, como você disse, eles renomearam para maior clareza) pensando que ele estava retornando uma fatia de string em vez de um Stringobjeto.
user3358302

Respostas:

122

Use to_string()( exemplo de execução aqui ):

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

Você está certo; to_str()foi renomeado para to_string()antes do Rust 1.0 ser lançado para consistência porque uma string alocada agora é chamada String.

Se você precisa passar uma fatia de string em algum lugar, você precisa obter uma &strreferência de String. Isso pode ser feito usando &uma coerção desreguladora:

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

O tutorial que você vinculou parece estar obsoleto. Se você estiver interessado em strings no Rust, pode dar uma olhada no capítulo sobre strings da The Rust Programming Language .

Vladimir Matveev
fonte
1
Muito obrigado cara, isso esclarece as coisas :) Também vou passar por aquele tutorial, já que a conversão de strings parece algo que ainda está mudando com a ferrugem.
user3358302