运行 代码块只有在特定条件下
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)
我认为显式调用更好,但只是想指出一种替代技术。
这里我想给大家看一个演示代码:
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)
我认为显式调用更好,但只是想指出一种替代技术。