Передача нескольких блоков кода в качестве аргументов в Ruby - PullRequest
37 голосов
/ 17 марта 2010

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

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

и я называю это так:

opportunity { @some_array.empty? }

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

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

и

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

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

1 Ответ

60 голосов
/ 17 марта 2010

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

Использование синтаксиса 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
...