我很好奇为什么 Swift 语言工程师决定使用这种语法:
do {
let x = try statement that throws
try a void statement that throws
} catch {
}
与更传统的 try-catch 语法相比,它的作用似乎完全相同。但在 Swift 中,需要为抛出异常的每一行键入一个 try。
最佳答案
他们想要使用 try
调用每个可能抛出的特定表达式。我想原因是,关于异常的一个常见提示是它们是“隐形的 goto”,用户如果不查看他们正在使用的每个函数的定义,就无法知道将抛出什么。在每次抛出函数调用时都需要 try
来消除这个问题。
我个人认为“看不见的 goto”是一个有效的提示。异常远非非结构化(如goto
),而是使错误处理高度结构化。此外,如果您正确使用异常,您几乎不需要一眼就能看出函数抛出了什么。欲了解更多信息,请参阅http://exceptionsafecode.com ,其中详细讨论了异常的正确使用。
鉴于他们希望 try
成为抛出函数调用的显式调用,他们可能不想将其重用于传统的 try
block 语法。
他们也可能只是不使用任何关键字:
{
let x = try foo()
} catch {
// ...
}
他们还使用 do
来引入任意嵌套范围:
do {
let x = foo()
}
其他语言已经使用大括号而不使用任何关键字。想必他们觉得拥有关键字可以使语法更易于阅读或解析等。
关于swift - Swift 2.0 中的异常(exception)。为什么是 'do' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30771683/