我正在尝试比较2个文件。如果仅显示1个文件,则会创建副本。
在使用begin..rescue..end
时,是否可以重新调用该方法?
def differ()
begin
file_today = read_file("/etc/hosts.deny")
file_yesterday = read_file("/etc/hosts.deny_old")
content = Diffy::Diff.new(file_yesterday, file_today)
rescue
copy_log
differ #call itself?!O_o Well, after the copy has been created!
end
return content
end
这是“不同的#call本身?!O_o嗯,创建副本后!”我不能上班。
答案 0 :(得分:2)
您可以在rescue子句中使用retry
关键字重新启动它。
编辑:以下是免费版Programming Ruby:
的更多信息“redo语句导致循环重复当前迭代。但是,有时候,你需要将循环回到最开始。重试语句就是故障。重试重启任何类型的迭代器循环。重试在重新启动之前会重新评估迭代器的任何参数。“
编辑:我意识到重试的这种行为已在1.9中弃用。只知道重试通常用于重新执行引发异常的代码块。
确保在重试之前修复了导致异常的原因 - 否则最终会无限循环!