Ruby 抛接教程不清楚

Ruby Throw-Catch tutorial unclear

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:")

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

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

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

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

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

如果您对三个提示中的任何一个回答 !,该块将终止。所以你不会得到块内剩余的提示。

你仍然会在最后一行得到提示,因为它在 catch.

之外

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

此外,如果您在 catch 块之外对最后的提示回答 !,您将收到错误消息,因为 throw 未被捕获。