Come si converte da un numero intero a una stringa?


94

Non sono in grado di compilare codice che converta un tipo da un numero intero a una stringa. Sto eseguendo un esempio dal tutorial di Rust for Rubyists che ha varie conversioni di tipo come:

"Fizz".to_str()e num.to_str()(dove numè un numero intero).

Penso che la maggior parte (se non tutte) di queste to_str()chiamate di funzione siano state deprecate. Qual è il modo attuale per convertire un intero in una stringa?

Gli errori che ricevo sono:

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`

scusa se non seguo ma ho provato a cercare la sorgente int e sembra usare doc.rust-lang.org/0.11.0/std/num/strconv/index.html ma questo restituisce solo un vettore di byte . Inoltre c'è il to_string()metodo ma che restituisce Stringe non una stringa letterale.
user3358302

haha non importa, pensavo to_str()fosse un valore di ritorno diverso, useròto_string()
user3358302

1
@ user3358302, nessun metodo può restituire una cosa che chiami "stringa letterale" a meno che non restituiscano valori letterali noti staticamente perché questi valori hanno un tipo &'static str, ovvero una sezione di stringa con una durata statica, impossibile da ottenere utilizzando dati creati dinamicamente. Puoi crearli solo usando stringhe letterali.
Vladimir Matveev

buono a sapersi! Penso che il metodo to_strmi abbia confuso (che come hai detto, hanno rinominato per chiarezza) pensando che stesse restituendo una fetta di stringa invece di un Stringoggetto.
user3358302

Risposte:


131

Usa to_string()( esempio in esecuzione qui ):

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

Hai ragione; to_str()è stato rinominato to_string()prima del rilascio di Rust 1.0 per coerenza perché ora viene chiamata una stringa allocata String.

Se è necessario passare una sezione di stringa da qualche parte, è necessario ottenere un &strriferimento da String. Questo può essere fatto usando &e una coercizione deref:

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

Il tutorial a cui ti sei collegato sembra essere obsoleto. Se sei interessato alle stringhe in Rust, puoi dare un'occhiata al capitolo sulle stringhe del Linguaggio di programmazione Rust .


1
Grazie mille amico, questo chiarisce le cose :) Inoltre seguirò quel tutorial poiché la conversione delle stringhe sembra qualcosa che sta ancora cambiando sulla ruggine.
user3358302
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.