我试图使用jruby 1.3.1,快速和culerity来测试我的rails应用程序javascript。 应用程序本身在ruby 1.8.7 + phusion乘客下运行(运行正常,无测试:))
一切安装工作正常但我的应用程序使用some_enumerable.each_slice(10)
将较大的数组拆分为较小的子数组,每个数组包含10个元素。
Celerity需要jruby和jruby只有ruby 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
答案 0 :(得分:2)
original_each_slice(count, block)
应为original_each_slice(count, &block)
。
另外,如果你省略to_a
,你将更接近1.8.7+的行为,它返回一个枚举器,而不是一个数组。
(别忘了require 'enumerator'
btw)
答案 1 :(得分:1)
结帐'backports'宝石:)