提问人:user199135 提问时间:4/17/2022 最后编辑:TonyArrauser199135 更新时间:4/17/2022 访问量:94
Ruby Throw-Catch 教程不清楚
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:")
正常执行时,它会经历姓名、年龄、性别,然后再次返回姓名,尽管提示只询问姓名。
为什么会发生这种情况,而不是仅仅被问到“姓名”?
答:
1赞
TonyArra
4/17/2022
#1
最后一行不会立即执行,因为它在块之后。promptAndGet("Name")
catch
正常的流程是,块中的所有内容都会立即按顺序执行。这就是为什么你在里面得到所有 3 个提示的原因。如果您回答了所有 3 个提示,您还将看到最后一行的提示。catch :quitRequested
如果您回答了三个提示中的任何一个,则阻止将终止。因此,您将不会在块内获得剩余的提示。!
您仍会在最后一行收到提示,因为它位于 .catch
throw
是终止块的原因,而不是启动块的原因。catch
此外,如果你在块外回答最后一个提示,你会得到一个错误,因为没有被捕获。!
catch
throw
评论