2009-09-22 72 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)