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!()
}
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。