Ruby · Intermediário · Inglês · Técnico
lazy
Método que transforma um enumerável em um Enumerator::Lazy, em que map e select só são calculados quando o resultado é pedido, elemento por elemento. Permite trabalhar com sequências infinitas.
Onde usar
Aparece em pipelines sobre arquivos grandes ou ranges infinitos, evitando arrays intermediários. No fim é preciso forçar o cálculo com first, to_a ou force.
Em código
r = (1..Float::INFINITY).lazy
pares = r.select(&:even?).map { |n| n * n }
p pares.first(3) # => [4, 16, 36]Exemplos
Make it lazy so we don't load the whole file.
Deixe preguiçoso para não carregar o arquivo inteiro.
A lazy range can be infinite.
Um range preguiçoso pode ser infinito.
Cuidado
Sem lazy, (1..Float::INFINITY).map trava tentando construir tudo; e em coleções pequenas o lazy raramente compensa.
Sinônimos
avaliação preguiçosa