Cette fonctionnalité rapproche de plus en plus ruby du domaine des langages fonctionnels.
La présentation est disponible sur slideshare :
Le code des exemples est le suivant:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def ma_fonction (parametre) | |
puts "je passe" | |
puts parametre.to_s | |
puts parametre.size | |
end | |
ma_fonction(2) | |
ma_fonction (1+1) | |
ma_fonction(1..3000000000) | |
ma_fonction([1..Float::INFINITY]) | |
ma_fonction(1..Float::INFINITY) | |
## deuxime exemple | |
infinite_range = (1..Float::INFINITY) | |
e = infinite_range.lazy.select { |num| num % 42 == 0 } | |
5.times {puts e.next } |
Avec le mode lazy , ruby est capable de retarder l'évaluation d'expression et mieux encore de le faire à la demande.
Le principal cas d'usage reste l'utilisation des streams (flux) appliquée à des besoins de diffusions de video ou de fichier sous la forme de chunk (tronçons). Ainsi Node.js dispose d'une api permettant de brancher des flux entres eux un peu à la façon de la commande 'pipe' sous unix.