如何清楚地比较新旧价值?

时间:2013-08-01 13:49:55

标签: ruby

我已经重复了一段时间并且从不喜欢它的常见代码包括保存值,执行操作以及之后评估值。请看以下示例

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变量的情况下重写代码?

2 个答案:

答案 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