2013-04-17 4 views
0

У меня есть следующий код ...Предельная петля блока?

parser = AppleEpf::Parser.new('tmp/incremental/itunes20130410/application') 
parser.process_rows { |app| 
    Resque.enqueue(AddApp, app) 
} 

Прямо сейчас, этот файл (tmp/incremental/itunes...) имеет более чем 90 000 строк в нем. Для целей тестирования было бы неплохо ограничить вызов блока process_rows всего несколькими строками (скажем ... 100).

Есть ли способ ограничить цикл в блоке?

Для справки, вот process_rows метод в перл:

def process_rows(&block) 
    File.foreach(@filename, RECORD_SEPARATOR) do |line| 
    unless line[0].chr == COMMENT_CHAR 
     line = line.chomp(RECORD_SEPARATOR) 
     block.call(line.split(FIELD_SEPARATOR, -1)) if block_given? 
    end 
    end 
end 
+0

Вы можете использовать 'yield' вместо' block.call', если вы говорите о блоке по умолчанию подставляться в методе. – tadman

ответ

2

Возможно, вы ищете команду break.

Внутри любого цикла рубинового вы можете поместить эту команду, чтобы остановить выполнение и вернуть что-то (или нет), так что вы можете использовать его как:

loop do 
    do_something_great 
    break if some_condition 
end 

Для управления исполнением.

всегда приветствуется ссылка на рубиново-документ: http://ruby-doc.org/docs/keywords/1.9/Object.html#method-i-break

1

Я думаю, что вы ищете break ключевое слово.