#rust #type-conversion
Вопрос:
Я беру второй аргумент с помощью функции и хотел бы преобразовать его из строки std::ffi:OS в строку с плавающей точкой или двойной. В настоящее время у меня есть следующий код, но синтаксический анализ не работает.
fn get_second_arg() -> Result<f64, Box<dyn Error>> {
match env::args_os().nth(2) {
None => Err(From::from("expected 2 arguments")),
Some(min_balance) => {
let min_balance_f64: f64 = min_balance.parse()?
Ok(min_balance_f64)
}
}
}
Я получаю ошибку:
no method named `parse` found for struct `std::ffi::OsString` in the current scope
Ответ №1:
std::ffi::OsString
имеет into_string
возвращаемый элемент Result<String, OsString>
, в котором вы можете извлечь Ok
вариант и вызвать String::parse
.
Ответ №2:
Для полноты картины это рабочий код ответа @Braddy Dean:
fn get_second_arg() -> Result<f64, Box<dyn Error>> {
match env::args_os().nth(2) {
None => Err(From::from("expected 2 arguments")),
Some(min_balance) => {
let min_balance_option = min_balance.into_string().ok();
match min_balance_option {
None => Err(From::from("Unable to parse second argument")),
Some (value) => {
let min_balance_f64: f64 = value.parse()?;
Ok(min_balance_f64)
}
}
}
}
}