【问题标题】:Match tuple as input to map匹配元组作为映射的输入
【发布时间】:2016-10-27 06:45:48
【问题描述】:

尝试对映射中的元组进行模式匹配:

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

【问题讨论】:

    标签: rust


    【解决方案1】:

    关键在错误信息中:

      |
    3 |     let sums = z.iter().map(|(a, b)| a + b);
      |                              ^^^^^^ expected reference, found tuple
      |
    

    它告诉你map 通过引用接受它的参数,因此你需要在模式中引用:

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

    就是这样。

    【讨论】:

    • 提示 facepalm 3 ... 2 ... 1 ... :facepalm: 谢谢
    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 2014-07-04
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多