рдпрд╣ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
struct Foo;
struct Bar {
a: Foo,
b: Foo,
}
fn main() {
let bar = Box::new(Bar { a: Foo, b: Foo });
let Bar { a, b } = *bar;
}
error[E0382]: use of moved value: `bar`
--> x.rs:11:18
|
11 | let Bar { a, b } = *bar;
| - ^ value used here after move
| |
| value moved here
|
= note: move occurs because `bar.a` has type `Foo`, which does not implement the `Copy` trait
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдбрд╛рд▓рдиреЗ рд╕реЗ рдмреЙрдХреНрд╕ рдбреЗрд░реЗрдл рдФрд░ рд╡рд┐рдирд╛рд╢ рдХреЗ рдмреАрдЪ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдЗрд╕реЗ рдареАрдХ рдХрд░рддрд╛ рд╣реИ:
fn main() {
let bar = Box::new(Bar { a: Foo, b: Foo });
let Bar { a, b } = { let intermediate = *bar; intermediate };
}
рдпрд╣ рдПрдХ рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
рдкреНрд░рднрд╛рд╡рд┐рдд рд╕рдВрд╕реНрдХрд░рдг:
rustc 1.23.0 (766bd11c8 2018-01-01)
rustc 1.25.0-nightly (73ac5d6a8 2018-01-11)
рдмреЙрдХреНрд╕ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рднреА рд╣реЛрддрд╛ рд╣реИред
#![feature(box_patterns)]
struct Foo;
struct Bar {
a: Foo,
b: Foo,
}
fn main() {
let bar = Box::new(Bar { a: Foo, b: Foo });
let box Bar { a, b } = bar;
}
рдпрд╣ https://github.com/rust-lang/rust/issues/16223 рдХрд╛ рдПрдХ рдбреБрдкреНрд▓реА рд╣реИ
рдЯреНрд░рд╛рдЗрдПрдЬ: рдпрд╣ рддрдп рд╣реИ!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдмреЙрдХреНрд╕ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рднреА рд╣реЛрддрд╛ рд╣реИред