Rust 锈蚀错误:删除可变借用后发生借用

Rust 锈蚀错误:删除可变借用后发生借用,rust,lifetime,borrow,Rust,Lifetime,Borrow,我的测试代码: 设mutc=0; 设mut inc=|{c+=1;c}; dropinc; 普林顿!{},c; rustc说: 错误[E0502]:无法将'c'作为不可变项借用,因为它也是作为可变项借用的 ->.\src\closure.rs:20:24 | 12 |让mut inc=|{c+=1;c}; |---由于在结束语中使用了'c',因此发生了以前的借用 | | |可变借用发生在这里 ... 20 | println!{},c; |^^^^^此

我的测试代码:

设mutc=0; 设mut inc=|{c+=1;c}; dropinc; 普林顿!{},c; rustc说:

错误[E0502]:无法将'c'作为不可变项借用,因为它也是作为可变项借用的 ->.\src\closure.rs:20:24 | 12 |让mut inc=|{c+=1;c}; |---由于在结束语中使用了'c',因此发生了以前的借用 | | |可变借用发生在这里 ... 20 | println!{},c; |^^^^^此处发生不可变借用 21 | } |-可变借用结束于此 但是在println之前,inc是手动删除的!借c,不是吗


那么我的代码有什么问题?请提供帮助。

您对作用域和生存期如何工作的理解是正确的。在Rust Edition 2018中,它们默认启用了非词汇生存期。在此之前,inc的生存期将一直到当前词法范围的末尾,即块的末尾,即使其值在此之前已移动

如果可以使用Rust版本1.31或更高版本,则只需在Cargo.toml中指定版本:

[套餐] 版本=2018 如果您使用的是最新的锈迹,则当您使用新货物创建新板条箱时,锈迹会自动放置在那里

如果您不使用Cargo,rustc默认为2015版,因此您需要明确提供该版本:

rustc --edition 2018 main.rs
如果出于某种原因使用较旧的Rust夜间构建,则可以通过在主文件中添加以下内容来启用非词汇生存期:

#![feature(nll)]
如果您停留在较旧的版本构建上,通常可以通过引入较短的范围来修复这些错误,使用如下块:

let mut c = 0;
{
    let mut inc = || { c += 1; c };
    drop(inc);
    // scope of inc ends here
}
println!("{}", c);

您对作用域和生命周期如何工作的理解是正确的。在Rust Edition 2018中,它们默认启用了非词汇生存期。在此之前,inc的生存期将一直到当前词法范围的末尾,即块的末尾,即使其值在此之前已移动

如果可以使用Rust版本1.31或更高版本,则只需在Cargo.toml中指定版本:

[套餐] 版本=2018 如果您使用的是最新的锈迹,则当您使用新货物创建新板条箱时,锈迹会自动放置在那里

如果您不使用Cargo,rustc默认为2015版,因此您需要明确提供该版本:

rustc --edition 2018 main.rs
如果出于某种原因使用较旧的Rust夜间构建,则可以通过在主文件中添加以下内容来启用非词汇生存期:

#![feature(nll)]
如果您停留在较旧的版本构建上,通常可以通过引入较短的范围来修复这些错误,使用如下块:

let mut c = 0;
{
    let mut inc = || { c += 1; c };
    drop(inc);
    // scope of inc ends here
}
println!("{}", c);

其他相关问题:,其他相关问题:,啊,对不起,我为这个问题创建了一个规范问题,希望你不介意。对不起,我为这个问题创建了一个规范问题,希望你不介意