更改每晚的 Rust 版本?

Change nightly Rust version?

我尝试通过命令 cargo +nightly build --release -Z unstable-options 构建 rls,但出现以下错误:

error[E0599]: no method named `expect_none` found for enum `Option<Fingerprint>` in the current scope
    --> /Users/cjw/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-705.0.0/src/lib.rs:2003:48
     |
2003 |                 cache[index].replace(sub_hash).expect_none("Cache slot was filled");
     |                                                ^^^^^^^^^^^ method not found in `Option<Fingerprint>`

搜索后,我发现expect_none是夜间功能,似乎已被删除。

所以我想也许我应该更改 rust 编译器版本以解决编译问题。如果这是正确的解决方案,我该怎么做?谁能提供一些详细的建议?

使用rustup您可以管理不同的夜间版本。有关更多信息,请参阅 The Edition Guide

作为Option::expect_none was removed on March 25th,我们可以通过以下方式获取3月24日的每晚:

rustup toolchain install nightly-2021-03-24 --force

注意:使用 --force 选项是因为组件 rustfmtclippy 可能缺失。

切换到新下载的工具链:

rustup default nightly-2021-03-24

以下 main.rs 现在应该像预期的那样恐慌:

#![feature(option_expect_none)]

fn main() {
    let value = Some(42);
    value.expect_none("The answer");
}

如果你很好奇,你可以用 nightly-2021-03-26 试试这个,你会发现它会给你预期的错误,表明它确实被删除了:

error[E0599]: no method named `expect_none` found for enum `Option<{integer}>` in the current scope
 --> src/main.rs:5:11
  |
5 |     value.expect_none("Expected none!");
  |           ^^^^^^^^^^^ method not found in `Option<{integer}>`