2013-10-07 2 views
2

я называю API третьего лица, которое дает блок и возвращает массив:Как избежать вызова метода, который дает блок дважды?

my.api.all arg: value do |ret| 
    #block 
end 

Я хочу, чтобы каким-то образом вызвать метод, чтобы получить размер массива:

array = my.api.all(arg: value) 

if array.size > minValue 
    #avoid calling all again, but how? 
    my.api.all arg: value do |ret| 
    #block 
    end 
end 

Тогда я хочу чтобы избежать повторного вызова метода, но иметь код в блоке, который дает выполнение.

Это возможно любым способом или существует ли способ избежать вызова метода all дважды?

+0

у вас есть доступ к возвращенному массиву во время выполнения вашего блока? – fotanus

+0

@fotanus У меня нет доступа к возвращенному массиву в блоке – dagda1

ответ

0

Как насчет хранения блока в строке и eval позже

str = "" 

array = my.api.all arg: value do |ret| 
    str = <<-eos 
     #code e.g. 
     puts "block executed with arg: #{ret}" 
    eos 
    end 

if array.size > minValue 
    eval str 
end 
Смежные вопросы