3

怠惰な配列を生成するための次の簡単なコードがあります。

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

公式のRuby1.9.3では、出力は[1,2,3,4,5]、私が欲しいものです。

しかし、ルビニウスでは、エラーが発生し、列挙子定数が見つからないことがわかります。

それで私はそれを調べて、列挙子がEnumerableの代わりにモジュールで定義されていることを見つけました、そしてkernelそれが生成されるとき、それは括弧内にいくつかの引数を必要とします:http: //rubydoc.info/github/evanphx/rubinius/master/Enumerable/Enumerator

より多くの引数が必要なため、またはに変更しようとしましたが、どちらも機能しEnumerator.newませEnumerable::Enumerator.newん。include Enumerable

上記の例をRubiniusで行うにはどうすればよいですか?公式とRubiniusの両方でコードを機能させる方法はありますか?

4

2 に答える 2

3

グローバル名前空間に列挙子がない1.8モードでRubiniusを使用しています。Rubiniusを1.9モードで使用してください。そうすれば、例は正常に機能します。Rubiniusの起動時に-X19を渡すか、たとえばRBXOPT = -X19を設定することにより、1.9を使用できます。

コンパイル時にconfigureを使用して、1.9モードをデフォルトにすることもできます。

于 2012-04-15T20:48:46.743 に答える
1

Rubiniusのバグ/行方不明のクラスのように聞こえます。githubで問題を開くと、追加されます。または、掘り下げてプルリクエストを送信してください!

于 2012-04-15T20:10:47.097 に答える