繁体   English   中英

仅在某些情况下才在块中运行代码

[英]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)

安德烈的回答很好,应该接受。

但只需要指出,您可以将proc转换为块,而不是在块中调用proc。

 VCR.use_cassette(vcr_cassette, &actions)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM