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 num
jest 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`
string
int
type-conversion
rust
user3358302
źródło
źródło
to_string()
metoda, która zwraca,String
a nie literał.to_str()
to inna wartość zwracana,to_string()
&'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.to_str
zdezorientowała mnie (którą, jak powiedziałeś, zmieniono nazwę dla przejrzystości), myśląc, że zwraca kawałek struny zamiastString
obiektu.Odpowiedzi:
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 nato_string()
przed wydaniem Rust 1.0 dla zachowania spójności, ponieważ przypisany ciąg jest teraz wywoływanyString
.Jeśli potrzebujesz gdzieś przekazać kawałek łańcucha, musisz uzyskać
&str
odniesienie zString
. 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 .
źródło