J'essaie de trouver une manière élégante de créer une liste à partir d'une fonction qui génère des valeurs dans Python et Ruby.Créer des listes en utilisant yield dans Ruby et Python
En Python:
def foo(x):
for i in range(x):
if bar(i): yield i
result = list(foo(100))
Dans Ruby:
def foo(x)
x.times {|i| yield i if bar(i)}
end
result = []
foo(100) {|x| result << x}
Bien que j'aime travailler dans les deux langues, je l'ai toujours été un peu dérangé par la version Ruby ayant pour initialiser la liste et Puis remplissez-le. Les résultats yield
de Python donnent une itération simple, ce qui est génial. Le yield
de Ruby invoque un bloc, ce qui est aussi génial, mais quand je veux juste remplir une liste, ça me semble un peu maladroit.
Y a-t-il une manière plus élégante de Ruby?
MISE À JOUR Retravaillé l'exemple pour montrer que le nombre de valeurs générées par la fonction n'est pas nécessairement égal à x.
Les "rendements" de Ruby et Python sont sémantiquement différents. Le rendement de Python est presque plus proche de celui de Ruby que celui de Ruby. – rampion