我需要将一片字节处理成固定的块,但块模式只在运行时才知道:
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
绑定,它超出了循环迭代之间的范围。
有更优雅的方法吗?
答案 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_message
或remaining_message
。