我能想到的唯一用例redo
适用于写入套接字或从数据库读取等操作,但如果这些操作失败一次,后续尝试很可能也会失败,所以对我来说这仍然有点毫无意义,至于retry
我真的想不出它会有什么用处。
这对我来说似乎毫无意义,因为我不知道也不使用 Ruby,但我渴望有一天创建一种很棒的语言,所以我想至少知道一些最流行的语言设计背后的原因。
这个想法是你在打电话之前改变一些东西redo
or retry
,希望你所做的一切第二次都能奏效。我没有例子redo
,但我们发现了用途retry
在我正在开发的应用程序中。基本上,如果您有一些代码可能由于外部原因(例如网络)而失败,但每次运行代码时执行前提条件检查的成本太高,您可以使用retry
in a begin...rescue
堵塞。不确定这是否清楚,所以我将直接举例说明。
基本上,我们有一些使用以下命令访问远程目录的代码Net:SFTP
。目录should存在,但在某些特殊情况下尚未制定。如果它不存在,我们想尝试一次来实现它。但是每次执行网络访问来检查目录是否存在的成本太高,特别是因为只有在特殊情况下目录才会不存在。所以我们这样做:
tried_mkdir = false
begin
# Attempt to access remote directory
...
rescue Net::SFTP::StatusException
raise if tried_mkdir
tried_mkdir = true
# Attempt to make the remote directory
...
retry
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)