一个ruby方法,它接受一个块并调用阻塞

时间:2011-03-15 09:23:31

标签: ruby

在我的应用程序中,我有一些看起来像这样的代码:

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 个答案:

答案 0 :(得分:1)

为自己编写func()非常容易:

def func
  yield
end

不幸的是,您的想法不起作用,该块仅适用于func,而不是第一次调用。我能想到接近你想要的唯一方法是将块定义为proc并手动传递它:

block = Proc.new { booking_update }

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

这确实具有不需要func()方法的优势。