2015-05-28 3 views
2

У меня есть это:шаблона ошибка парсера поплавка

struct Test { 
    amount: f32 
} 

fn main() { 

    let amnt: String = "9.95".to_string(); 
    let test = Test { 
     amount: match amnt.parse() { 
      Ok(num) => num.unwrap(), 
      Err(e) => 0f32 
     } 
    }; 

} 

и это вызывает ошибку:

error: the type of this value must be known in this context 
     Ok(num) => num.unwrap(), 
        ^~~~~~~~~~~~ 

Как бросить num исправить эту ошибку?

ответ

7

Поскольку вы уже сопоставляете образцы по Ok(), вам не нужно звонить unwrap(); num - уже тип f32.

Это нормально компилируется:

struct Test { 
    amount: f32 
} 

fn main() { 

    let amnt: String = "9.95".to_string(); 
    let test = Test { 
     amount: match amnt.parse() { 
      Ok(num) => num, 
      Err(e) => 0f32 
     } 
    }; 

} 

Вы также можете использовать Result::unwrap_or() вместо:

Test { 
    amount: amnt.parse().unwrap_or(0.0) 
} 
Смежные вопросы