E0009

未匹配的标注

注意:编译器不再触发此错误码

在模式中,所有没有实现 Copy trait trait 的值必须以相同的方式绑定。这样做目的是避免同时通过 move 和 ref 绑定。

这种限制可能在将来的 Rust 版本中被移除。

错误的代码示例:

#![feature(move_ref_pattern)]

struct X { x: (), }

let x = Some((X { x: () }, X { x: () }));
match x {
    Some((y, ref z)) => {}, // error: 在同一个模式中不能同时通过 move 和 ref 绑定。
    None => panic!()
}

你有两个解决方案:

解决方案#1:以同样的方式绑定模式的值。

struct X { x: (), }

let x = Some((X { x: () }, X { x: () }));
match x {
    Some((ref y, ref z)) => {},
    // or Some((y, z)) => {}
    None => panic!()
}

解决方案#2:为 X 结构实现 Copy trait 。

然而,请牢记首选的解决方案是第一种。

#[derive(Clone, Copy)]
struct X { x: (), }

let x = Some((X { x: () }, X { x: () }));
match x {
    Some((y, ref z)) => {},
    None => panic!()
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~