Ruby Throw-Catch 教程不清楚

Ruby Throw-Catch tutorial unclear

提问人:user199135 提问时间:4/17/2022 最后编辑:TonyArrauser199135 更新时间:4/17/2022 访问量:94

问:

def promptAndGet(prompt)
   print prompt
   res = readline.chomp
   throw :quitRequested if res == "!"
   return res
end

catch :quitRequested do
   name = promptAndGet("Name: ")
   age = promptAndGet("Age: ")
   sex = promptAndGet("Sex: ")
   # ..
   # process information
end
promptAndGet("Name:")

从 https://www.tutorialspoint.com/ruby/ruby_exceptions.htm

正常执行时,它会经历姓名、年龄、性别,然后再次返回姓名,尽管提示只询问姓名。

为什么会发生这种情况,而不是仅仅被问到“姓名”?

ruby 异常 try-catch 抛出

评论


答:

1赞 TonyArra 4/17/2022 #1

最后一行不会立即执行,因为它在块之后。promptAndGet("Name")catch

正常的流程是,块中的所有内容都会立即按顺序执行。这就是为什么你在里面得到所有 3 个提示的原因。如果您回答了所有 3 个提示,您还将看到最后一行的提示。catch :quitRequested

如果您回答了三个提示中的任何一个,则阻止将终止。因此,您将不会在块内获得剩余的提示。!

您仍会在最后一行收到提示,因为它位于 .catch

throw是终止块的原因,而不是启动块的原因。catch

此外,如果你在块外回答最后一个提示,你会得到一个错误,因为没有被捕获。!catchthrow