首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby中的redo和retry语句的用途是什么?

Ruby中的redo和retry语句的用途是什么?
EN

Stack Overflow用户
提问于 2012-04-08 21:29:38
回答 2查看 3.8K关注 0票数 7

我能想到的redo的唯一用例是像写套接字或从数据库读取这样的操作,但是如果这些操作失败一次,后续的尝试很可能也会失败,所以它对我来说仍然是没有意义的,至于retry,我真的想不出它有什么用处。

这对我来说可能是毫无意义的,因为我不知道也不会使用Ruby,但我渴望有一天能创建一种很棒的语言,所以我至少想知道一些最流行的语言设计背后的原因。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-09 00:31:10

这个想法是在调用redoretry之前更改一些东西,希望您所做的一切都能在第二次工作。我没有redo的示例,但我们在我正在开发的应用程序中发现了retry的用法。基本上,如果你有一些代码可能由于外部原因(例如网络)而失败,但每次运行代码时执行前置条件检查的代价太高,你可以在begin...rescue块中使用retry。不确定这是不是很清楚,所以我将直接进入示例。

基本上,我们有一些使用Net:SFTP访问远程目录的代码。该目录应该存在,但在某些特殊情况下,它还没有创建。如果它不在那里,我们想尝试一次来实现它。但是,每次执行网络访问以检查目录是否存在将是非常昂贵的,特别是因为只有在特殊情况下它才不会存在。因此,我们按如下方式进行操作:

代码语言:javascript
复制
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
票数 9
EN

Stack Overflow用户

发布于 2012-04-09 03:52:25

redo的用例可以是用户输入检查:

代码语言:javascript
复制
nums = Array.new(5){[rand(1..9), rand(1..9)]}
nums.each do |num1, num2|
  print "What is #{num1} + #{num2}: "
  redo unless gets.to_i == num1 + num2
end
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10063166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档