рдЕрдЧрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдХреЛ рдЬрд┐рддрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдЙрдзрд╛рд░ рд▓реЗрддрд╛ рд╣реИ:
fn main () {
let f = |y| { println!("{}", y); };
let x = 4u8;
f(&x);
}
рдЬреЛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ:
error: `x` does not live long enough
--> ./test.rs:5:1
|
4 | f(&x);
| - borrow occurs here
5 | }
| ^ `x` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╣рдо рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
fn main () {
let f = |y: &u8| { println!("{}", y); };
let x = 4u8;
f(&x);
}
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рди рд╣реА рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЗрд╕ рдЖрд╢рдп рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдорд┐рд▓рд╛ред
rustc --version --verbose
:
rustc 1.17.0-nightly (24a70eb59 2017-02-09)
binary: rustc
commit-hash: 24a70eb598a76edb0941f628a87946b40f2a1c83
commit-date: 2017-02-09
host: x86_64-unknown-linux-gnu
release: 1.17.0-nightly
LLVM version: 3.9
рдмрд╕ рдЦреЛрдЬ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдмреНрдж рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП: рдЖрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдордВрдЪ рдкрд░ рдЗрд╕рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдпрд╣ рдордЬрдмреВрдд рдзрд╛рд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ |x: &u8|
рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдПрдЪрдЖрд░рдЯреАрдмреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд: рдореИрдВ рдЗрд╕рдореЗрдВ рднреА рднрд╛рдЧ рдЧрдпрд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣реНрдпреВрди рдХрд╛ рдЕрдХреНрдЯреВрдмрд░ рдЙрджрд╛рд╣рд░рдг), рдЬреЛ рджреВрд╕рд░реА рджрд┐рд╢рд╛ рдореЗрдВ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ; рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдХреЗрд╡рд▓ _рдмрд┐рдирд╛_рд╕реНрдкрд╖реНрдЯ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://github.com/rust-lang/rust/issues/22557
рдЯреНрд░рд╛рдЗрдПрдЬ: рдЕрдм 2018 рдкрд░ рд╕рдВрдХрд▓рд┐рдд рд╣реИред
2015 рддреНрд░реБрдЯрд┐рдпрд╛рдВ:
error[E0597]: `x` does not live long enough
--> src/main.rs:4:8
|
4 | f(&x);
| ^ borrowed value does not live long enough
5 | }
| - `x` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created
rustc: 1.32.0
рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рдЕрдм рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд░рд╛рдд рдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЯреНрд░рд╛рдЗрдПрдЬ: рдЕрдм 2018 рдкрд░ рд╕рдВрдХрд▓рд┐рдд рд╣реИред
2015 рддреНрд░реБрдЯрд┐рдпрд╛рдВ:
rustc: 1.32.0