【发布时间】:2020-10-26 08:47:10
【问题描述】:
我有以下锈代码:
fn tokenize(line: &str) -> Vec<&str> {
let mut tokens = Vec::new();
let mut chars = line.char_indices();
for (i, c) in chars {
match c {
'"' => {
if let Some(pos) = chars.position(|(_, x)| x == '"') {
tokens.push(&line[i..=i+pos]);
} else {
// Not a complete string
}
}
// Other options...
}
}
tokens
}
我试图优雅地从该行中提取一个用双引号括起来的字符串,但是由于 chars.position 采用可变引用并且 chars 被移入 for 循环,我得到一个编译错误 - “移动后借用的值”。编译器建议在 for 循环中借用 chars,但这不起作用,因为不可变引用不是迭代器(可变引用会导致原始问题,我不能再次可变地借用 position)。
我觉得应该有一个简单的解决方案。 有没有一种惯用的方法来做到这一点,还是我需要回归到一个一个地附加字符?
【问题讨论】: