2010-02-19 109 views
1

我想使用Enumerable#each_slice。它不起作用在我的电脑上,说明找不到方法。为什么every_slice不工作?

我运行红宝石1.8.6(2008-08-11 PATCHLEVEL 287)[万向darwin9.0]

API:http://ruby-doc.org/core/classes/Enumerable.html#M003142

实施例:

(1..10).each_slice(3) {|a| p a} # I get NoMethodError: undefined method `each_slice' for 1..10:Range 

我是什么做错了?

+0

你确定ruby-doc没有提及ruby 1.9吗? – Pete 2010-02-19 02:43:37

+0

我怎么弄出来的?我在API中没有看到任何说明版本的内容。 – Pran 2010-02-19 02:49:05

回答

7

在使用each_slice之前,在ruby 1.8.6中你必须使用require 'enumerator'(它是stdlib的一部分,并且已经被合并到1.8.7+的核中)。

不幸的是,ruby-doc列出了stdlib添加到核心类的方法,而没有提到方法来自哪里。

+0

谢谢! 仅供参考,我试过,它给了我一个例外。另一方面,工作并且该方法可用。 – Pran 2010-02-19 19:36:52

+0

你是对的,它是枚举员。我的错。 – sepp2k 2010-02-19 19:46:22

1

只是相比1.8.6到1.9,它看起来像

(1..10).respond_to? :each_slice 

是1.9真和假1.8.6。所以,你使用的文档不适用于1.8.6。如果您可以轻松升级到较新版本的Ruby,它应该在Range上为您提供该方法。

+0

谢谢,下次我会检查文档版本。 – Pran 2010-02-19 02:51:11

+0

实际上并非如此。链接的文档是1.8.6。 1.8.7和1.9的文档分别具有core-1.8.7和core-1.9,而不是其核心内容。这只是核心文档还列出了通过stdlib中的文件添加到核心类的方法(是的,这很糟糕)。 – sepp2k 2010-02-19 11:43:05