Size: a a a

2020 November 10

ИЛ

Иван Лещенко... in Rust Beginners
Oleg ℕizhnik
Есть ли способ сконвертировать String в заовненный impl Iterator<Item=char> лучше, чем
.chars().collect::<Vec<_>>().into_iter()
источник

ИЛ

Иван Лещенко... in Rust Beginners
Chars вроде и так владеющий символ даёт
источник

MB

Mikail Bagishov in Rust Beginners
Иван Лещенко
Chars вроде и так владеющий символ даёт
Но он сам по себе не-'static
источник

ИЛ

Иван Лещенко... in Rust Beginners
Mikail Bagishov
Но он сам по себе не-'static
Если строка умрёт раньше итератора, то как мы продолжим считывать символы?
источник

MB

Mikail Bagishov in Rust Beginners
Вот поэтому ОП и хочет into_chars()
источник

Oℕ

Oleg ℕizhnik in Rust Beginners
Иван Лещенко
Chars вроде и так владеющий символ даёт
Возможно плохо трактуется "заовненный", я имел в виду структуру, владеющую всеми данными без лайфтайма
источник

MB

Mikail Bagishov in Rust Beginners
Mikail Bagishov
Вот поэтому ОП и хочет into_chars()
Который владел бы строкой
источник

Oℕ

Oleg ℕizhnik in Rust Beginners
Mikail Bagishov
Вот поэтому ОП и хочет into_chars()
+
источник

ИЛ

Иван Лещенко... in Rust Beginners
Oleg ℕizhnik
Возможно плохо трактуется "заовненный", я имел в виду структуру, владеющую всеми данными без лайфтайма
String.into_boxed_str().leak().chars()
источник

ИЛ

Иван Лещенко... in Rust Beginners
Oleg ℕizhnik
Возможно плохо трактуется "заовненный", я имел в виду структуру, владеющую всеми данными без лайфтайма
А, сначала было статик лайфтайм, не прокатит
источник

MB

Mikail Bagishov in Rust Beginners
Ну я не знаю, как это без ансейфа сделать
источник

Oℕ

Oleg ℕizhnik in Rust Beginners
Иван Лещенко
А, сначала было статик лайфтайм, не прокатит
Да, я путаюсь в понятиях
источник

MB

Mikail Bagishov in Rust Beginners
Хотя либы типа owning_ref могут помочь тут
источник

r

red75prime in Rust Beginners
Oleg ℕizhnik
Есть ли способ сконвертировать String в заовненный impl Iterator<Item=char> лучше, чем
.chars().collect::<Vec<_>>().into_iter()
Смотря что значит "лучше". Вот это меньше памяти потребует.

let mut idx = 0;
std::iter::from_fn(move|| {
   if let Some(ch) = string[idx..].chars().next() {
       idx += ch.len_utf8(); Some(ch)
   } else { None }
}
)
источник

Oℕ

Oleg ℕizhnik in Rust Beginners
red75prime
Смотря что значит "лучше". Вот это меньше памяти потребует.

let mut idx = 0;
std::iter::from_fn(move|| {
   if let Some(ch) = string[idx..].chars().next() {
       idx += ch.len_utf8(); Some(ch)
   } else { None }
}
)
спасибоъ
источник

Oℕ

Oleg ℕizhnik in Rust Beginners
string[idx..] - это impl Index<RangeFrom<usize>> ?
источник

r

red75prime in Rust Beginners
Oleg ℕizhnik
string[idx..] - это impl Index<RangeFrom<usize>> ?
да
источник

Oℕ

Oleg ℕizhnik in Rust Beginners
А почему у str
impl<I> Index<I> for str where
   I: SliceIndex<str>

А у String отдельно перечисляются сорта Range?
источник

А⚙

Антон ⚙️ in Rust Beginners
Oleg ℕizhnik
А почему у str
impl<I> Index<I> for str where
   I: SliceIndex<str>

А у String отдельно перечисляются сорта Range?
Разве? У String же индексация через Deref{Mut} работает
источник

AP

Alexander Prokudin in Rust Beginners
Подскажите нубу, такое как-то можно элегантно разрулить? once и empty же оба итераторы, чому нельзя в одну переменную...
источник