Я пытаюсь разобрать файл, используя регулярные выражения:Есть ли способ освободить привязку, прежде чем она выходит из сферы действия?
if let Some(m) = section_header_pattern.captures(&line).and_then(|c| c.get(1)) {
is_in_right_section = m.as_str().eq(section_name);
line.clear();
continue;
}
... но компилятор жалуется, потому что captures()
метод RegEx
«s имеет заем, который выдерживает в течение всей жизни матча:
error[E0502]: cannot borrow `line` as mutable because it is also borrowed as immutable
--> src/main.rs:58:13
|
56 | if let Some(m) = section_header_pattern.captures(&line).and_then(|c| c.get(1)) {
| ---- immutable borrow occurs here
...
58 | line.clear();
| ^^^^ mutable borrow occurs here
59 | continue;
60 | }
| - immutable borrow ends here
К моменту, когда я добираюсь до line.clear();
, я закончил с Match
и хотел очистить буфер и перейти к следующей строке в файле без дальнейшей обработки. Есть ли хорошее/чистое/элегантное/идиоматическое решение или мне нужно просто укусить пулю и ввести следующий блок «if»?
дубликата http://stackoverflow.com/q/30243606/155423? – Shepmaster
Не связано с вашим вопросом; почему вы используете '.eq ('? Я видел, как другие люди делают то же самое. В чем причина, почему вы избегаете '=='? – Shepmaster
@Shepmaster Я не уверен, что они дубликаты, поскольку другой вопрос имеет дело с блок else (который у меня нет) и решается ранним возвратом. – steamer25