Jak przekonwertować liczbę całkowitą na ciąg?

88

Nie mogę skompilować kodu, który konwertuje typ z liczby całkowitej na ciąg. Korzystam z przykładu z samouczka Rust for Rubyists, który ma różne konwersje typów, takie jak:

"Fizz".to_str()i num.to_str()(gdzie numjest liczbą całkowitą).

Myślę, że większość (jeśli nie wszystkie) z tych to_str()wywołań funkcji została wycofana. Jaki jest obecny sposób konwersji liczby całkowitej na łańcuch?

Otrzymuję błędy:

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
źródło
przepraszam, jeśli nie śledzę, ale próbowałem znaleźć źródło int i wydaje się, że używa doc.rust-lang.org/0.11.0/std/num/strconv/index.html, ale zwraca to tylko wektor bajtowy . Ponadto istnieje to_string()metoda, która zwraca, Stringa nie literał.
user3358302
haha nieważne, myślałem, że to_str()to inna wartość zwracana, to_string()
użyję
1
@ user3358302, żadna metoda nie może zwrócić rzeczy, którą nazywasz „ciągiem literalnym”, chyba że zwracają statycznie znane literały, ponieważ te wartości mają typ &'static str, to znaczy fragment ciągu ze statycznym okresem istnienia, którego nie można uzyskać za pomocą dynamicznie tworzonych danych. Możesz je utworzyć tylko za pomocą literałów ciągów.
Vladimir Matveev
dobrze wiedzieć! Myślę, że ta metoda to_strzdezorientowała mnie (którą, jak powiedziałeś, zmieniono nazwę dla przejrzystości), myśląc, że zwraca kawałek struny zamiast Stringobiektu.
user3358302

Odpowiedzi:

123

Użyj to_string()( przykład działa tutaj ):

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

Masz rację; to_str()została zmieniona na to_string()przed wydaniem Rust 1.0 dla zachowania spójności, ponieważ przypisany ciąg jest teraz wywoływany String.

Jeśli potrzebujesz gdzieś przekazać kawałek łańcucha, musisz uzyskać &strodniesienie z String. Można to zrobić za pomocą &i przymusu deref:

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

Samouczek, do którego utworzyłeś łącze, wydaje się przestarzały. Jeśli interesują Cię łańcuchy znaków w Rust, możesz przejrzeć rozdział poświęcony ciągom znaków w języku programowania Rust .

Vladimir Matveev
źródło
1
Wielkie dzięki stary, to wszystko wyjaśnia :) Również przejdę przez ten samouczek, ponieważ konwersja ciągów wydaje się być czymś, co wciąż zmienia się na rdzę.
user3358302