2009-08-17 2 views
0

Noob Frage:IEnumerable Ruby

Betrachten Sie den Code # folgende C:

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

Was würde der Korrespondent Code in Ruby sein? Die Sache ist, dass ich das Rückgabeobjekt einer Klassenmethode so wie ein Enumerable verhalten möchte, damit ich include ?, sort_by, etc. darauf aufrufen kann.

Übrigens, ich weiß, ich kann die Methode eine Liste zurückgeben, aber das wäre nicht (a) faul, da die Liste zuerst berechnet werden müsste, (b) auf der Suche nach einer ideologischen Lösung: -)

Antwort

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

Große Antwort, danke. Gibt es irgendeine Möglichkeit, rekursive Enumerationen aus dieser Lösung zu machen, oder müsste ich eine andere .each/yield verwenden? –

0

Nur fyi, könnte die C# auf diese reduziert werden, die immer noch faul ist.

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

Richtig :-) Ich wollte jedoch die Verwendung von Ertrag vermitteln. –