= std::iter::from_fn(|| Some(random())).take(64).collect();
for a in arr {
println!("{}", a);
}
}
А вот такой на плейграунде почему-то выдает то пустой вектор, то с 1 или 2 или 3 элемента (результат меняется от запуска к запуску) Что происходит в этом коде?:
use rand::prelude::*;
fn main() {
let arr:Vec<bool> = std::iter::from_fn(random).take(64).collect();
for a in arr {
println!("{}", a);
}
}
рандомно генерируется Option<bool>
если ты хочешь бесконечную последовательность случайных булов, попробуй вместо from_fn взять std::iter::repeat_with
А для каких кейсов лучше from_fn, а для каких repeat_with?
зависит от того, есть ли у функции какая-то логика для завершения если твоя функция, например, читает откуда-то данные, пока не дойдёт до конца, она будет возвращать Option<…>, тк в какой-то момент данные кончатся и итератор остановится а from_fn для случаев когда функция может выдавать значения бесконечно
наоборот наверное? from_fn же опшины выдаёт
Обсуждают сегодня