2009-08-17 8 views
0

question Noob:IEnumerable sur Ruby

Considérez ce qui suit le code C#:

public IEnumerable<xpto> CalculatedList { 
    get { foreach(var item in privateList.OfType<xpto>()) yield return item; } 
} 

Quel serait le code correspondant à Ruby? Le fait est que je veux que l'objet retour d'une méthode de classe se comporte comme un Enumerable, donc je peux appeler include ?, sort_by, etc. Par ailleurs, je sais que je peux faire retourner la méthode par une méthode, mais ce ne serait pas (a) paresseux, puisque la liste devrait d'abord être calculée, (b) à la recherche d'une solution idéomatique: -

Répondre

2
require 'enumerator' 
def calculated_list 
    return enum_for(:calculated_list) unless block_given? 

    private_list.each do |item| 
    yield item.to_xpto # Or whatever the equivalent for OfType<xpto> looks like 
    end 
end 
+0

Bonne réponse, merci. N'importe quel moyen d'effectuer des énumérations récursives à partir de cette solution, ou devrais-je utiliser un autre .each/yield? –

0

Juste fyi, le C# pourrait être réduit à ceci, qui est encore paresseux.

public IEnumerable<xpto> CalculatedList 
{ get { return privateList.OfType<xpto>()); } } 
+0

Vrai :-) Je voulais cependant vous faire part de l'utilisation du rendement. –