gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:16:21 25 4
gpt4 key购买 nike

我需要将一段字节处理成固定 block ,但 block 模式仅在运行时已知:

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 绑定(bind),它超出了循环迭代之间的范围。

有没有更优雅的方法来做到这一点?

最佳答案

你的推理是正确的 let (chunk, message) = message.split_at(element.size); 在该范围内创建一个新的绑定(bind) message 并且不更新外部 message 值。

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

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

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

我相信您目前拥有的是一个完美的解决方案,或许可以将 message2 重命名为 rest_of_messageremaining_message 之类的名称。

关于rust - 当片段大小可以在每次迭代中更改时,在循环中使用片段片段的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44023955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com