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
未被捕获。
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
未被捕获。