2009-09-22 2 views
1

임 jruby 1.3.1, celerity 및 culerity를 ​​사용하여 내 레일 애플리케이션 자바 스크립트를 테스트하려고합니다. 응용 프로그램 자체가 루비 1.8.7 + phusion 여객에서 실행 (미세, 산세 시험 : 실행)루비에 블록이없는 each_slice의 에뮬레이션 <1.8.7

모든 설치 현명한 잘 작동을하지만 내 응용 프로그램은 10 elelents 각각 작은 부분 배열에 큰 배열을 분할 some_enumerable.each_slice(10)를 사용 .

속도 요구 사항 jruby 및 jruby는 루비 1.8.6과 호환되므로 블록없는 각 슬라 이스를 지원하지 않습니다.

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 

: RUBY_PLATFORM == "자바"(또는 RUBY_VERSION < 1.8.7)

이것은 지금까지 내가 (원인의 소멸 코드)를 가지고있는 경우

그래서 나는이 기능을 추가하는 initalizer 정의에 대해 생각하고 이 코드는 분명히 작동하지 않으며 나는 해결책을 제시하는 누군가를 정말로 고맙게 생각합니다.

감사합니다.

업데이트 : 솔루션 덕분에 내 오류에 저를 가리키는 위해 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 

답변

1

를 체크 아웃 '백 포트'보석 :

+0

DOH을 (BTW require 'enumerator'하는 것을 잊지 마세요)! :) 먼저 검색 했어야합니다. – thenoseman

2

original_each_slice(count, block)original_each_slice(count, &block)을해야합니다.

또한 to_a을 생략하면 1.8.7+의 동작에 가까워 지므로 배열이 아닌 열거자를 반환합니다.