Rust 我可以使用itertools::PutBack::将您放回循环中吗?
我的用例:Rust 我可以使用itertools::PutBack::将您放回循环中吗?,rust,itertools,borrow-checker,Rust,Itertools,Borrow Checker,我的用例: 环绕字符串 对词法分析器状态机中的每个字符作出反应 看到一些字符后,意识到前一个字符是其标记的结尾 完成代币 转换回空状态(表示没有部分构造令牌) 使用put\u back 继续状态机处理,其中返回字符将可用于下一个令牌中的第一个字符 以下是一个尝试的示例: use itertools::put_back; // 0.8.0 fn main() { let hello = "Hello world".to_owned(); let hello_iter = he
- 环绕字符串
- 对词法分析器状态机中的每个字符作出反应
- 看到一些字符后,意识到前一个字符是其标记的结尾
- 完成代币
- 转换回空状态(表示没有部分构造令牌)
- 使用
put\u back
- 继续状态机处理,其中返回字符将可用于下一个令牌中的第一个字符
use itertools::put_back; // 0.8.0
fn main() {
let hello = "Hello world".to_owned();
let hello_iter = hello.chars();
let mut putback_iterator = put_back(hello_iter);
let mut already_putback = false;
for c in putback_iterator {
if c == 'd' && !already_putback {
putback_iterator.put_back('!');
already_putback = true;
}
println!("Char is {}", c.to_string());
}
}
错误消息:
错误[E0382]:移动值的借用:`putback\u迭代器`
-->src/main.rs:10:13
|
6 |让mut putback_迭代器=put_back(hello_iter);
|---------之所以发生移动,是因为'putback\u iterator'的类型为'itertools::adapters::putbackfor
循环允许您迭代实现的任何内容。此特性将定义为\u iter(self)
,它使用调用它的对象并返回迭代器。即使self
已经是一个迭代器(就像在代码中一样),这也是正确的
因此,for
循环使用迭代器,使得迭代器在循环中不可访问
另一种方法是在让循环时使用:
use itertools::put_back; // 0.8.0
fn main() {
let hello = "Hello world".to_owned();
let hello_iter = hello.chars();
let mut putback_iterator = put_back(hello_iter);
let mut already_putback = false;
while let Some(c) = putback_iterator.next() {
if c == 'd' && !already_putback {
putback_iterator.put_back('!');
already_putback = true;
}
println!("Char is {}", c.to_string());
}
}
@Shepmaster-感谢您的编辑!杰出的我是一名C#程序员,我总是在foreach循环中使用IEnumerables,从来没有在while循环中使用过,所以我没有想到这一点。