Преобразовать строку в int в Rust?
Примечание: этот вопрос содержит устаревший код pre-1.0! Однако ответ правильный.
преобразование str до int в ржавчине, я могу сделать это:
let my_int = from_str::<int>(my_str);
единственный способ, которым я знаю, как преобразовать String до int - получить кусочек его, а затем использовать from_str вот так:
let my_int = from_str::<int>(my_string.as_slice());
есть ли способ напрямую преобразовать String до int?
4 ответов:
вы можете напрямую конвертировать в int с помощью
str::parse::<T>()метод.let my_string = "27".to_string(); // `parse()` works with `&str` and `String`! let my_int = my_string.parse::<i32>().unwrap();вы можете либо указать тип для разбора с оператором turbofish (
::<>), как показано выше или через явные аннотации типа:let my_int: i32 = my_string.parse().unwrap();как уже упоминалось в комментариях,
parse()возвращает aResult. Этот результат будетErrесли строка не может быть проанализирована как указанный тип (например, строка"peter"не может быть проанализирован какi32).
let my_u8: u8 = "42".parse::<u8>().unwrap(); let my_u32: u32 = "42".parse::<u32>().unwrap(); // or, to be safe, match the `Err` match "foobar".parse::<i32>() { Ok(n) => do_something_with(n), Err(e) => weep_and_moan(), }
parseвозвращает acore::result::Result<u32, core::num::ParseIntError>иunwrap"перемещает значение v из опции, если это некоторые(v) [или] паники, если само значение равно None".
parseэто общая функция, следовательно, тип в угловых скобках.
С недавней ночной, вы можете сделать это:
let my_int = from_str::<int>(&*my_string);то, что здесь происходит, это
Stringтеперь можно разыменовать вstr. Тем не менее, функция хочет&str, Так что нам придется брать опять. Для справки, я считаю, что этот конкретный шаблон (&*) называется "заимствования".
Ну, нет. Почему так должно быть? Просто отбросьте строку, если она вам больше не нужна.
&strполезнее, чемStringкогда вам нужно только прочитать строку, потому что это лишь взгляд на исходные данные, а не его владелец. Вы можете передать его более легко, чемString, и он копируется, поэтому он не используется вызываемыми методами. В этом отношении он более общий: если у вас естьString, вы можете передать его, где&strожидается, но если вы есть&str, вы можете передать его только в функции, ожидающиеStringЕсли вы делаете новое распределение.вы можете узнать больше о различиях между этими двумя и когда использовать их в официальное руководство строки.
Comments