此代码在https://doc.rust-lang.org/stable/book/box-syntax-and-patterns.html中显示。
#![feature(box_syntax, box_patterns)]
fn main() {
let b = Some(box 5);
match b {
Some(box n) if n < 0 => {
println!("Box contains negative number {}", n);
}
Some(box n) if n >= 0 => {
println!("Box contains non-negative number {}", n);
}
None => {
println!("No box");
}
_ => unreachable!(),
}
}但是,当我运行它时,会发生以下错误:
error[E0554]: #[feature] may not be used on the stable release channel我也试过
fn main() {
let b = Some(box 5);
}error: box expression syntax is experimental; 是不是因为我的“锈”不是最新版本的?如何在Box::new()中获取内容?我试过了
fn main() {
let b = Some(Box::new(5));
match b {
Some(Box::new(y)) => print!("{:?}", y),
_ => print!("{:?}", 1),
}
}error[E0164]: `Box::new` does not name a tuple variant or a tuple struct
--> main.rs:6:14
|
6 | Some(Box::new(y)) => print!("{:?}", y),
| ^^^^^^^^^^^ not a tuple variant or struct发布于 2017-02-11 15:05:53
您使用的是#[feature],而这些只能与夜间锈蚀编译器一起使用。我认为目前无法在稳定锈蚀中与Box相匹配,但夜间允许使用以下方法(就像您在开始时尝试的那样):
#![feature(box_patterns)]
fn main() {
let b = Some(Box::new(5));
match b {
Some(box y) => print!("{:?}", y),
_ => print!("{:?}", 1),
}
}发布于 2017-02-11 15:11:00
稳定是主要的版本,Rust开发人员注意确保稳定通道的特性和更新是稳定的。这意味着它们是完全实现和安全使用的,但最重要的是,当Rust开发人员向稳定添加一个特性时,这意味着他们承诺向后兼容。
向后兼容性承诺很重要,因为这意味着开发人员可以开始在库中使用稳定的特性,而不必担心在更新语言时是否必须从头开始重写库的大部分内容。
在Rust中还有其他可用的特性,例如box语法,这些特性还没有完全完成。其中许多都有部分或几乎完全的实现,但它们的确切语法和实现仍有待更改。因为这些特性被认为是不稳定的,因此它们可能会受到不兼容的逆向更改,如果您依赖它们,这些更改可能会破坏您现有的代码。
例如,对于所谓的“放置新”(避免首先在堆栈上分配,然后复制到堆),有两种语法建议:
in PLACE { BLOCK }
PLACE <- EXPR当放置新的到达稳定,只有一个语法将可用。然而,在开发过程中,Rust团队可能会尝试多种方法来做事情,并根据自己的意愿改变它们。任何使用不稳定特性的人都必须在编译器或语言API更改时更新他们的代码。
但有时人们想冒这个风险,并利用稳定版本中尚未提供的特性,因为他们知道自己的代码可能会被未来的版本破坏。
对此,有夜间发布。这是编译器的一个版本,它使用启用的不稳定特性和API构建。如果您使用夜间发行版,您可以使用box语法和其他各种特性,这些特性还没有准备好进行稳定发布。
可能获得夜间构建以及在夜间版本和稳定版本之间切换的最简单方法是使用沙沙安装锈蚀。
Rustup可以轻松地安装针对不同平台的Rust编译器,并在稳定版本、夜间版本和beta版本之间切换。
https://stackoverflow.com/questions/42177226
复制相似问题