Je suis vraiment très bête, je n'arrive plus à comprendre ce que tu veux dire. Est-ce que j'ai donné un exemple idiot et académique, ou bien est-ce que j'ai donné un exemple trop spécifique et que j'aurais dû généraliser à tous les itérateurs ?
Formulé autrement, est-ce que tu changes de thèse à chaque message parce que tu essayes seulement de prouver que ton interlocuteur a tort ?
Au cas où tu serais de bonne foi, ce qui me semble improbable, je voudrais te faire remarquer qu'il s'agit d'un exemple sorti en 5 minutes dans une discution sur les itérateurs, pas d'une thèse de doctorat sur les langages, ou d'un cours de génie logiciel. Il s'agit d'une illustration de comment on peut écrire un certain type de choses, plus précisément de comment on peut "passer" plus d'un bloc à un itérateur.
Il est assez facile d'écrire la même chose en permettant de choisir l'itérateur, mais le code est moins accessible à quelqu'un qui ne connaît pas Ruby, et donc illustre beaucoup moins le sujet de la discution. Ca donne quelque chose comme ça:
class Object
def takewhile(iterateur, predicat)
self.send(iterateur) do |element|
break unless predicat.call(element)
yield(element)
end
end
end
(0..10).takewhile(:each, lambda { ... }) do |element|
...
end
Ca ne marche pas bien avec les itérateurs qui renvoient plus d'un élément à la fois, mais j'ai la flemme de faire un exemple parfait, surtout aussi stupide et académique. Tu remarqueras que le code est presque identique au précédent, puisque la seule différence est qu'on passe l'itérateur en paramètre, en plus du bloc et du prédicat.
[^] # Re: Célèbre ?
Posté par Yusei (Mastodon) . En réponse à la dépêche Sortie de Ruby on Rails 2.0. Évalué à 3.
Formulé autrement, est-ce que tu changes de thèse à chaque message parce que tu essayes seulement de prouver que ton interlocuteur a tort ?
Au cas où tu serais de bonne foi, ce qui me semble improbable, je voudrais te faire remarquer qu'il s'agit d'un exemple sorti en 5 minutes dans une discution sur les itérateurs, pas d'une thèse de doctorat sur les langages, ou d'un cours de génie logiciel. Il s'agit d'une illustration de comment on peut écrire un certain type de choses, plus précisément de comment on peut "passer" plus d'un bloc à un itérateur.
Il est assez facile d'écrire la même chose en permettant de choisir l'itérateur, mais le code est moins accessible à quelqu'un qui ne connaît pas Ruby, et donc illustre beaucoup moins le sujet de la discution. Ca donne quelque chose comme ça:
class Object
def takewhile(iterateur, predicat)
self.send(iterateur) do |element|
break unless predicat.call(element)
yield(element)
end
end
end
(0..10).takewhile(:each, lambda { ... }) do |element|
...
end
Ca ne marche pas bien avec les itérateurs qui renvoient plus d'un élément à la fois, mais j'ai la flemme de faire un exemple parfait, surtout aussi stupide et académique. Tu remarqueras que le code est presque identique au précédent, puisque la seule différence est qu'on passe l'itérateur en paramètre, en plus du bloc et du prédicat.