找到一本编译器结构教科书,并查找悬而未决的模糊性。
鉴于在Java和大多数其他语言中语法可怕的语言中,空格是存在的。您如何解读:
try
try
stuff();
catch (FooException exc)
handle(exc);
catch (BarException exc)
handle(exc);
catch (BazException exc)
handle(exc);
是吗:
try {
try {
stuff();
} catch (FooException exc) {
handle(exc);
} catch (BarException exc) {
handle(exc);
}
} catch (BazException exc) {
handle(exc);
}
艺术
try {
try {
stuff();
} catch (FooException exc) {
handle(exc);
}
} catch (BarException exc) {
handle(exc);
} catch (BazException exc) {
handle(exc);
}
悬空的 - 其他歧义通过将 与 最里面的 .我们是否要添加更复杂的复杂性来处理这种糟糕的风格?哈哈else
if
编辑:有一条评论,该示例未涵盖 。这是一个适当的奇怪决定,要求大括号,但不要求/。但无论如何,为了完整起见,请考虑以下代码。catch
try
catch
finally
try {
stuff();
} catch (FooException foo)
try {
handle(foo);
} catch (BarException bar)
handle(bar);
catch (BazException baz)
handle(baz);
finally
release();
是的 和 与内在的还是外在的 ?同样,语言设计委员会本可以添加大量语法来消除歧义,但明确的风格再次获胜。我在 Sun/Oracle 的工作会稍微容易一些,如果语言被简化为要求在任何地方都使用显式大括号。catch
BazException
finally
try