1

我正在尝试使用 jruby 1.3.1、celerity 和 culerity 测试我的 rails 应用程序 javascript。应用程序本身在 ruby​​ 1.8.7 + phusion 乘客下运行(并且运行良好,没有测试:))

一切安装方式都可以正常工作,但我的应用程序用于some_enumerable.each_slice(10)将较大的数组拆分为较小的子数组,每个子数组有 10 个元素。

Celerity 需要 jruby,而 jruby 仅兼容 ruby​​ 1.8.6,因此不支持无块 each_slice。

所以我正在考虑定义一个初始化器,如果 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
4

2 回答 2

2

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

此外,如果您省略to_a,您将更接近 1.8.7+ 的行为,它返回一个枚举器,而不是一个数组。

(别忘了require 'enumerator'顺便说一句)

于 2009-09-22T13:11:25.013 回答
1

签出'backports' gem :)

于 2009-09-23T19:35:30.150 回答