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