Как показывает ошибка, синтаксис шаблона среза является экспериментальным. Это означает, что семантика не ясна или синтаксис может измениться в будущем. В результате вы должны каждую ночь версии компилятора и явно запросить эту функцию:
#![feature(slice_patterns)]
fn main() {
match " \"".as_bytes() {
&[space, quote] => println!("space: {:?}, quote: {:?}", space, quote),
_ => println!("the slice lenght is not 2!"),
}
}
отметить также, что вы не можете просто написать &[space, quote] = whatever
в любом случае, потому что их вероятность того, что whatever
не нужной длины. Чтобы шаблон был исчерпывающим, вам нужен случай _
или корпус с ..
. То, что вы пробовали, даст еще одну ошибку:
let &[space, quote] = " \"".as_bytes();
//^gives: error: refutable pattern in local binding: `&[]` not covered [E0005]
Как описано в примере, синтаксис экспериментальный, поэтому лучше не использовать его сейчас. Почему вы хотите использовать шаблон среза? – kennytm
Означает ли это, что оно еще не реализовано? Я получаю, что мне больше не нужно это делать, потому что я нашел лучшее решение для своей проблемы. Однако мне все еще было интересно, почему он не работает. И мне, возможно, придется использовать его когда-нибудь. – x4rkz
@ x4rkz: Экспериментальное означает, что еще не определено, будет ли оно реализовано как есть, реализовано по-другому или вообще не реализовано. Это в движении. –