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_VERSION < 1.8.7したがって、RUBY_PLATFORM == "java" (または)の場合にこの機能を追加するイニタライザーを定義することを考えています。

これまでのところ、私は得ました(原因の無効なコード):

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 に答える