2009-09-22 71 views
1

我试图测试我的rails应用程序JavaScript使用jruby 1.3.1,迅速和culerity。 应用程序本身下红宝石1.8.7 + PHUSION客运运行(和运行正常,SANS测试:))仿真each_slice无红宝石块<1.8.7

安装的一切明智的工作正常,但我的应用程序使用some_enumerable.each_slice(10)到更大的阵列分裂成更小的子阵列,每组10个elelents 。

Celerity需要jruby和jruby只是红宝石1.8.6兼容,因此不支持无块each_slice。

所以我想定义initalizer这增加了这个功能,如果RUBY_PLATFORM == “Java” 的(或RUBY_VERSION < 1.8.7

这远我得到了(原因解散的代码):

if true #ruby 1.8.6 
module Enumerable 
    alias_method :original_each_slice, :each_slice 
    def each_slice(count, &block) 
    # call original method in 1.8.6 
    if block_given? 
     original_each_slice(count, block) 
    else 
     self.enum_for(:original_each_slice, count).to_a 
    end 
    end 
end 
end 

这段代码显然不起作用,我非常感谢有人指点我的解决方案。

谢谢!

更新: 解决方案感谢sepp2k指着我我的错误:

if RUBY_VERSION < "1.8.7" 
    require 'enumerator' 
    module Enumerable 
    alias_method :original_each_slice, :each_slice 
    def each_slice(count, &block) 
     if block_given? 
     # call original method when used with block 
     original_each_slice(count, &block) 
     else 
     # no block -> emulate 
     self.enum_for(:original_each_slice, count) 
     end 
    end 
    end 
end 

回答

2

original_each_slice(count, block)应该是original_each_slice(count, &block)

此外,如果您不使用to_a,则会更接近1.8.7+的行为,该行为返回枚举数而不是数组。

(不要忘了require 'enumerator' BTW)