3

我已经重复了几次但从不喜欢它的一段常见代码包括保存一个值,执行一个操作,然后评估该值。看下面的例子

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

4

2 回答 2

1

让对象知道文件状态是否发生变化并提供查询方法来测试它。在每个可以更改文件状态的方法开始时将 did_change 状态设置为 false。

project.some_operation_with_files
if project.files_did_change?
  puts "Changed"
else
  puts "No change."
end
于 2013-08-01T14:12:13.003 回答
0

在您的情况下会返回真/假状态或抛出异常吗?project当该方法返回 false 时,您应该假设无论如何状态都没有变化。

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
于 2013-08-01T14:01:54.617 回答