我已经重复了一段时间并且从不喜欢它的常见代码包括保存值,执行操作以及之后评估值。请看以下示例
old_files = project.files
project.some_operation_dealing_with_files
if old_files == project.files
puts "not changed"
else
puts "changed"
end
其中一个问题是,在第一行,当您阅读old_files = project.files
时,您不清楚要获得的位置。我想如果我可以消除该变量,代码会更好,但我不知道如何实现这一点。当然,我也愿意接受建议。
TLDR; 有没有办法在没有old_file
变量的情况下重写代码?
答案 0 :(得分:1)
如果文件状态发生变化,请使对象知道并提供查询方法来测试它。在每个可能更改文件状态的方法的开头将did_change状态设置为false。
project.some_operation_with_files
if project.files_did_change?
puts "Changed"
else
puts "No change."
end
答案 1 :(得分:0)
返回真/假状态或在您的情况下抛出异常工作?当方法返回false时,您应该假设project
的状态没有任何变化。
if project.some_operation_dealing_with_files
puts "Changed"
else
puts "Not Changed"
end
如果出现异常,您可以捕获特定类型的错误。同样,如果抛出错误,project
应该是幂等的,并且应该优雅地处理错误。
begin
project.some_operation_dealing_with_files
puts "Changed"
rescue Errno::ENOENT
puts "Not Changed. File not found."
# Clean up and handle the error gracefully
end