运行 代码块只有在特定条件下

Run code in block only when certain condition

这里我想给大家看一个演示代码:

if ENV["PRODUCTION"]
  user.apply_discount!
  product.update!
else
 VCR.use_cassette(vcr_cassette) do
    user.apply_discount!
    product.update!
 end
end

所以基本上 两次 我有相同的代码:

   user.apply_discount!
   product.update!

如何防止代码重复?你会怎么做? 我正在考虑将代码放在一个块中,然后直接调用它或在块中调用它。这是一个例子:

actions =  Proc.new do
  user.apply_discount!
  product.update!
end

if ENV["PRODUCTION"]
  actions.call
else
 VCR.use_cassette(vcr_cassette) do
    actions.call
 end
end

你有别的想法吗?更好的解决方案? 谢谢

您的版本明确且可读。

我唯一要做的就是将其移至通用方法:

def do_env_specific_stuff(stuff)
  ENV('PRODUCTION') ? stuff.call : VCR.use_cassette(vcr_cassette) { stuff.call }
end

然后:

stuff = proc do
  user.apply_discount!
  product.update!
end

do_env_specific_stuff(stuff)

Andrey 的回答非常好,应该采纳。

但只想指出,您可以将过程转换为块,而不是在块中调用过程...

 VCR.use_cassette(vcr_cassette, &actions)

我认为显式调用更好,但只是想指出一种替代技术。