我试图通过命令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
可以管理不同的夜间版本。有关详细信息,请参阅版本指南。
由于Option::expect_none
在3月25日被删除,我们可以通过以下方式获得3月24日的夜间:
rustup toolchain install nightly-2021-03-24 --force
注意:使用--force
选项是因为组件rustfmt
和clippy
可能丢失。
切换到新下载的工具链:
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}>`