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
正常執行時,它會遍歷姓名、年齡、性別,然后再次回傳姓名,盡管提示僅詢問姓名。
為什么會發生這種情況而不是僅僅詢問“名稱”?
uj5u.com熱心網友回復:
最后一行promptAndGet("Name")
不會立即執行,因為它在catch
塊之后。
正常流程是catch :quitRequested
塊內的所有內容都會立即按順序執行。這就是為什么你會在里面得到所有 3 個提示。如果您回答了所有 3 個提示,您還將獲得最后一行的提示。
如果您回答!
三個提示中的任何一個,則該塊將終止。所以你不會在塊內得到剩余的提示。
你仍然會在最后一行得到提示,因為它在catch
.
throw
是終止catch
塊的原因 - 而不是啟動它的原因。
此外,如果您!
在塊外回答最后的提示catch
,您將收到錯誤,因為throw
未捕獲。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458702.html
上一篇:由于嘗試捕獲多個例外而出現錯誤“區域變數年齡可能尚未初始化”
下一篇:Ada83例外是否包括資源清理?