Метод ruby, который принимает блок и вызывает этот блок - PullRequest
1 голос
/ 15 марта 2011

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

if is_translation?
  @booking.enable_dirty_associations do                                           
    booking_update
  end
else
  booking_update
end

Мне бы хотелось, чтобы это выглядело так:

is_translation? ? @booking.enable_dirty_associations : func do
  booking_update
end

Где func - метод, который берет блок и просто выполняет его.

Есть ли встроенный метод Ruby или, возможно, комбинаторная функция, которая делает это?

1 Ответ

1 голос
/ 15 марта 2011

Было бы довольно легко написать func () для себя:

def func
  yield
end

К сожалению, однако, ваша идея не сработает, блок будет применяться только к func, а не к первому вызову. Единственный способ приблизиться к тому, что вы хотите, - это определить блок как процесс и передать его вручную:

block = Proc.new { booking_update }

is_translation? ? @booking.enable_dirty_associations(&block) : block.call

Это имеет то преимущество, что не нуждается в методе func().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...