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`

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 .


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.