2

根据这个 ruby​​quiz,外部迭代器过去很慢,但现在更快。这是仅在 YARV(基于 C 的 ruby​​ 1.9 实现)中可用的改进,还是在基于 C 的 ruby​​ 1.8.7 实现中也可用?

另外,是否enum_for依赖外部迭代器?

4

2 回答 2

2

Ruby 1.9 使用纤维来实现Enumerator#next,这可能比 Ruby 1.8 更好,但仍然使它成为一个昂贵的调用。

enum_for返回一个Enumerator但不依赖于外部迭代器。只有在需要时才会创建纤维/延续,即如果您调用next但如果您调用each或任何其他继承自Enumerable.

Rubinius 和 JRuby 正在next针对内置类型进行优化,因为它很难实现,尤其是在 JVM 上。有趣的睡前阅读:ruby-core 上的这个线程

于 2010-06-17T04:24:04.557 回答
0

Rubinius 也有一些主要的性能增强,但它是 Ruby 1.8 实现,而不是 1.9。

于 2010-06-17T02:02:25.577 回答