当片段大小可以改变每次迭代时,在循环中使用片段的正确方法是什么?

时间:2017-05-17 11:45:53

标签: rust

我需要将一片字节处理成固定的块,但块模式只在运行时才知道:

pub fn process(mut message: &[u8], pattern: &[Pattern]) {
    for element in pattern: {
        match element {
            (...) => {
                let (chunk, message2) = message.split_at(element.size);
                /* process chunk */
                message = message2;
            },
            // ...
        }
    }
}

必须使用此message2感觉很尴尬。但是如果我做的话

let (chunk, message) = message.split_at(element.size);

然后它不起作用,我假设因为这实际上创建了一个新的messages绑定,它超出了循环迭代之间的范围。

有更优雅的方法吗?

1 个答案:

答案 0 :(得分:2)

您的推理是正确的let (chunk, message) = message.split_at(element.size);在该范围内创建新约束message并且不会更新外部message值。

您正在寻找的是元组的“解构分配”。这将允许将元组元素分配给现有的变量绑定,而不是创建新的绑定,例如:

let chunk;
(chunk, message) = message.split_at(element.size);

不幸的是,这在Rust中是不可能的。您可以看到Rust语言的a pre-RFC which proposes to add destructuring assignment

我相信您目前拥有的是一个非常好的解决方案,可能会将message2重命名为rest_of_messageremaining_message