Как преобразовать std::ffi::OSString в f64 или f32

#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)
                }
            }
            
        }
    }
}