我是一个 Rustacean 新手(完成了 rustaling 课程,到目前为止还很享受)。我在 Rust 书中的一些闭包示例中遇到了麻烦。特别是这个:
fn main() {
let mut list = vec![1, 2, 3];
let mut borrows_mutably = || list.push(7);
borrows_mutably();
}
Run Code Online (Sandbox Code Playgroud)
我们需要声明关闭这一事实mut对我来说很难理解。它确实是必要的,因为如果你不将它声明为 mut,编译器会抱怨:
calling `borrows_mutably` requires mutable binding due to mutable borrow of `list`
| |
| help: consider changing this to be mutable: `mut borrows_mutably`
|
| borrows_mutably();
| ^^^^ cannot borrow as mutable
Run Code Online (Sandbox Code Playgroud)
我在这里和那里读过很多帖子,我的理解是闭包需要被定义为mut因为它正在改变它的环境。不知道这个直觉对不对……
不管怎样,在玩另一个闭包时,我发现了一个打破我理解的例子。这个:
calling `borrows_mutably` requires mutable binding due to mutable borrow of `list`
| |
| help: …Run Code Online (Sandbox Code Playgroud)