Подтвердить что ты не робот

Передача нескольких блоков кода в качестве аргументов в Ruby

У меня есть метод, который принимает блок кода.

def opportunity
  @opportunities += 1
  if yield
    @performances +=1
  end
end

и я называю это следующим образом:

opportunity { @some_array.empty? }

Но как передать его более чем одному блоку кода, чтобы я мог использовать результат дважды, примерно так:

def opportunity
  if yield_1
    @opportunities += 1
  end
  if yield_2
    @performances +=1
  end
end

и

opportunity {@some_other_array.empty?} { @some_array.empty? }

Я знаю, что этот пример можно сделать без урока, но это просто для иллюстрации.

4b9b3361

Ответ 1

Вы не можете передавать несколько блоков, по сути, но вы можете передавать несколько proc или lambdas:

Использование синтаксиса 1.9:

opportunity ->{ @some_array.empty? }, ->{ @some_other_array.empty? }

и в самом методе:

def opportunity(lambda1, lambda2)
  if lambda1.()
    @opportunities += 1
  end
  if lambda2.()
    @performances += 1
  end
end