Как я могу назвать `взаимный` в результате вызова` sum`? - PullRequest
0 голосов
/ 06 октября 2018

Этот код дает правильный вывод: 0.018181818

fn main() {
    let v: i32 = vec![1, 2, 3, 4, 5].iter().map(|&x: &i32| x.pow(2)).sum();
    println!("{}", (v as f32).recip());
}

Когда я попытался соединить их в одну строку, я потерпел неудачу, так как тип вывода после sum отличается от требуемого типа вводаиз recip:

fn main() {
    let v: i32 = vec![1, 2, 3, 4, 5]
        .iter()
        .map(|&x: &i32| x.pow(2))
        .sum()
        .recip();
    println!("{}", v);
}
error[E0282]: type annotations needed
 --> src/main.rs:2:18
  |
2 |       let v: i32 = vec![1, 2, 3, 4, 5]
  |  __________________^
3 | |         .iter()
4 | |         .map(|&x: &i32| x.pow(2))
5 | |         .sum()
  | |______________^ cannot infer type for `S`
  |
  = note: type must be known at this point

Я также задал этот вопрос на форуме пользователя Rust .

1 Ответ

0 голосов
/ 06 октября 2018

Я нашел ответ на форуме и хотел бы поделиться здесь:

fn main() {
    let v = ((1..=5).map(|x: i32| x.pow(2)).sum::<i32>() as f32).recip();
    println!("The answer is: {}", v);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...