Size: a a a

Rust — русскоговорящее сообществo

2020 April 04

Э

Эрик in Rust — русскоговорящее сообществo
Андрей Власов
Тогда у метода next должен был быть лайфтайм, а у трейта итератор его нет
&'a BufRead -> Iterator::Item = Cow<'a, str>
источник

Э

Эрик in Rust — русскоговорящее сообществo
А, да, проблемы опять.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Так, Lines съедает BufRead полностью. next() требует &mut Lines. Можно лайфтайм к &Lines привязать.
источник

АВ

Андрей Власов in Rust — русскоговорящее сообществo
Ты не сможешь вписать это в трейт итератора
источник

АВ

Андрей Власов in Rust — русскоговорящее сообществo
Можно попробовать сделать реализацию Lines, который возвращает статик ссылку
источник

АВ

Андрей Власов in Rust — русскоговорящее сообществo
Ансейфом там всё такое
источник

Э

Эрик in Rust — русскоговорящее сообществo
Да не нужна там статик ссылка.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Потому что Cow::Owned всегда статик, потому что овнед.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А если конец буфера в середину строки не влез, то ссылка на буфер зависит от лайфтайма Lines.
источник

АВ

Андрей Власов in Rust — русскоговорящее сообществo
Эрик
Потому что Cow::Owned всегда статик, потому что овнед.
Чего
источник

Э

Эрик in Rust — русскоговорящее сообществo
Проблема там только в том, что BufRead трейт не даёт это сделать своими методами.
источник

АВ

Андрей Власов in Rust — русскоговорящее сообществo
Так ты же хочешь не овнед, а ссылку
источник

Э

Эрик in Rust — русскоговорящее сообществo
Хотя такой CowLines легко реализуется для структуры BufReader.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Андрей Власов
Так ты же хочешь не овнед, а ссылку
Я хочу меньше лишних аллокаций.
источник

r

red75prime in Rust — русскоговорящее сообществo
Эрик
Проблема там только в том, что BufRead трейт не даёт это сделать своими методами.
Почему не даёт? Делаем метод fn next_line(&mut self) -> Option<Cow<'_, str>> . Первым делом consume'им прошлую строку (если есть), потом fill_buf(), проверяем есть ли \n, сохраняем длину строки возвращаем Cow::Borrowed, если \n нет складываем всё в String
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
red75prime
Почему не даёт? Делаем метод fn next_line(&mut self) -> Option<Cow<'_, str>> . Первым делом consume'им прошлую строку (если есть), потом fill_buf(), проверяем есть ли \n, сохраняем длину строки возвращаем Cow::Borrowed, если \n нет складываем всё в String
Проблема только в том, что это не итератор
источник

r

red75prime in Rust — русскоговорящее сообществo
Или ждать streaming iterators, или так
источник

Э

Эрик in Rust — русскоговорящее сообществo
cannot infer an appropriate lifetime for borrow expression due to conflicting requirements
expected  std::iter::Iterator
  found  std::iter::Iterator
источник

A

Anton 📦 ᯌ in Rust — русскоговорящее сообществo
Эрик
cannot infer an appropriate lifetime for borrow expression due to conflicting requirements
expected  std::iter::Iterator
  found  std::iter::Iterator
Да бывает такое ошибка в лайфтаймах часто
источник

АК

Андрей Казанцев in Rust — русскоговорящее сообществo
Есть строка и в начале её находиться число. Как лучше всего достать число и слайс с которого уже идёт что то другое?
источник