2012-04-15 3 views
3

Ich habe diesen einfachen Code einen faulen Array zu erzeugen:Rubinius: Wie man Enumerator als den offiziellen Weg generiert?

lazy_arr = Enumerator.new { |y| 
    i = 1 
    loop { 
     y << i 
     i+=1 
    } 
} 
p lazy_arr.take(5) 

In offiziellen Ruby-1.9.3, ist der Ausgang [1,2,3,4,5], das, was ich will.

Aber in Rubinius gibt es Fehler und sagt mir kann Enumerator Konstante nicht finden.

So sah ich es auf, und Enumerator in Enumerable Modul statt kernel definiert finden, und wenn es erzeugt wird, braucht es einige Argumente in den Klammern: http://rubydoc.info/github/evanphx/rubinius/master/Enumerable/Enumerator

Ich versuchte Enumerator.new zu Enumerable::Enumerator.new zu ändern, oder include Enumerable funktioniert nicht, weil es mehr Argumente benötigt.

Wie kann ich das obige Beispiel in Rubinius machen? Gibt es irgendeinen Weg, um den Code sowohl bei Rubinius als auch bei Official funktionieren zu lassen?

Antwort

3

Sie verwenden Rubinius im 1.8-Modus, der im globalen Namespace nicht über Enumerator verfügt. Bitte benutze Rubinius im 1.9 Modus und das Beispiel funktioniert dann gut. Sie können 1.9 verwenden, indem Sie beim Starten von Rubinius -X19 übergeben oder RBXOPT = -X19 beispielsweise setzen.

Es ist auch möglich, 1.9-Modus als Standard mit konfigurieren während der Kompilierzeit zu machen.

+0

Großartig. Es funktioniert jetzt :) – texasbruce

1

Klingt wie ein Fehler/fehlende Klasse in Rubinius. Öffnen Sie ein Problem auf GitHub und es wird hinzugefügt. Oder graben Sie ein und senden Sie eine Pull-Anfrage!

Verwandte Themen