匹配元组作为映射的输入

时间:2016-10-27 06:45:48

标签: rust

尝试模式匹配地图中的元组:

fn main() {
    let z = vec![(1, 2), (3, 4)];
    let sums = z.iter().map(|(a, b)| a + b);
    println!("{:?}", sums);
}

产生错误

error[E0308]: mismatched types
 --> src/main.rs:3:30
  |
3 |     let sums = z.iter().map(|(a, b)| a + b);
  |                              ^^^^^^ expected reference, found tuple
  |
  = note: expected type `&({integer}, {integer})`
             found type `(_, _)`

可以以多种形式使用此语法,或者我必须写:

fn main() {
    let z = vec![(1, 2), (3, 4)];
    let sums = z.iter()
        .map(|pair| {
            let (a, b) = *pair;
            a + b
        })
        .collect::<Vec<_>>();
    println!("{:?}", sums);
}

1 个答案:

答案 0 :(得分:10)

密钥在错误消息中:

LINQ

它告诉你 | 3 | let sums = z.iter().map(|(a, b)| a + b); | ^^^^^^ expected reference, found tuple | 通过引用接受它的参数,因此你需要在模式中引用:

map

就是这样。