在我的应用程序中,我有一些看起来像这样的代码:
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方法,或者是组合函数可以做到这一点?
答案 0 :(得分:1)
为自己编写func()非常容易:
def func
yield
end
不幸的是,您的想法不起作用,该块仅适用于func
,而不是第一次调用。我能想到接近你想要的唯一方法是将块定义为proc并手动传递它:
block = Proc.new { booking_update }
is_translation? ? @booking.enable_dirty_associations(&block) : block.call
这确实具有不需要func()
方法的优势。