切片上的模式匹配

时间:2016-07-23 19:19:17

标签: rust matching

我做了类似这样的事情,有效:

HeadNode HeadNode1 = new HeadNode();    
Node Node1 = new Node();
Node1.X = 1;
Node1.Y = 2;
HeadNode1.Nodes.Add(Node1); 

我想做这样的事情

let s = " \"".as_bytes();
let (space, quote) = (s[0], s[1]);

但它给了我错误

&[space, quote] = " \"".as_bytes();

是否可以做类似的事情?

1 个答案:

答案 0 :(得分:4)

正如错误告诉您的那样,切片模式语法是实验性的。这意味着语义不明确或语法可能在将来发生变化。因此,您需要每晚版本的编译器并明确请求该功能:

#![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]