#rust
#строка #инт #преобразование типов #Ржавчина
Вопрос:
Я не могу скомпилировать код, который преобразует тип из целого числа в строку. Я использую пример из учебника Rust for Rubyists, который содержит различные преобразования типов, такие как:
"Fizz".to_str()
и num.to_str()
(где num
— целое число).
Я думаю, что большинство (если не все) этих to_str()
вызовов функций устарели. Каков текущий способ преобразования целого числа в строку?
Ошибки, которые я получаю, следующие:
error: type `amp;'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`
Комментарии:
1. извините, если я не понимаю, но я попытался найти источник int, и, похоже, он использует doc.rust-lang.org/0.11.0/std/num/strconv/index.html но это просто возвращает байтовый вектор. Кроме того, существует
to_string()
метод, но он возвращаетString
, а не буквальную строку.2. ха-ха, неважно, я думал
to_str()
, что это другое возвращаемое значение, я буду использоватьto_string()
3. @user3358302, ни один метод не может вернуть то, что вы называете «буквальной строкой», если они не возвращают статически известные литералы, потому что эти значения имеют тип
amp;'static str
, то есть фрагмент строки со статическим временем жизни, который невозможно получить с помощью динамически созданных данных. Вы можете создавать их только с помощью строковых литералов.4. полезно знать! Я думаю, что метод
to_str
смутил меня (который, как вы сказали, они переименовали для ясности), думая, что он возвращает фрагмент строки вместоString
объекта.
Ответ №1:
Используйте to_string()
(запуск примера здесь):
let x: u32 = 10;
let s: String = x.to_string();
println!("{}", s);
Вы правы; to_str()
был переименован в to_string()
перед выпуском Rust 1.0 для обеспечения согласованности, потому что теперь вызывается выделенная строка String
.
Если вам нужно куда-то передать фрагмент строки, вам нужно получить amp;str
ссылку из String
. Это можно сделать с помощью amp;
и принудительного удаления:
let ss: amp;str = amp;s; // specifying type is necessary for deref coercion to fire
let ss = amp;s[..]; // alternatively, use slicing syntax
Учебное пособие, на которое вы ссылались, кажется устаревшим. Если вас интересуют строки в Rust, вы можете просмотреть главу strings языка программирования Rust.
Комментарии:
1. Большое спасибо, чувак, это проясняет ситуацию 🙂 Также я пройдусь по этому руководству, поскольку преобразование строк похоже на то, что все еще меняется в rust.