Rust Split линии через пробелы: не найден метод сбора для типа & str

121
3

Я пытаюсь обработать вывод из командной строки построчно, и я застрял с обработкой str::Lines. Я пытаюсь получить для каждой строки все слова и обработать их (сравнить с каким-то шаблоном)

Мой код:

// output came properly from command
let mut lines = String::from_utf8_lossy(&output.stdout).to_string().lines();

for line in lines {
let vec: Vec<&str> = line.collect();

// Try to do something with a split...

Компилятор жалуется:

error[E0599]: no method named 'collect' found for type '&str' in the current scope
--> src/main.rs:218:39
|
218 | let vec: Vec<&str> = line.collect();
| ^^^^^^^
|
= note: the method 'collect' exists but the following trait bounds were not satisfied:
'&mut &str : std::iter::Iterator'
'&mut str : std::iter::Iterator'

Я думаю, что я, вероятно, могу скопировать строку в виде строки и попытаться преобразовать ее, но, поскольку я новичок в Rust, хотел бы получить совет/помощь, как мне сделать линию более плавной?

спросил(а) 2021-01-19T18:36:27+03:00 2 месяца, 3 недели назад
1
Решение
121

Хорошо, я понял, как решить эту проблему, в этом примере было несколько ошибок:

Мне нужна строка, а не строки из-за жизни Изменчивость здесь не была проблемой, поэтому просто удалили Для итерации & str мне нужно было извлечь Iterator? (не уверен здесь, все же, чувствую себя немного некомфортно с документами Rust...)

let s = String::from_utf8_lossy(&output.stdout).to_string();

for line in s.lines() {
let vec: Vec<&str> = line.split(' ').collect();

// Try to do something with a split...

ответил(а) 2021-01-19T18:36:27+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема