Scala的行为与Java的差别仅源于Java的try-finally不产生值。Java里,如果finally子句包含一个显式返回语句,或抛出一个异常,这个返回值或异常将“凌驾”于任何之前源于try代码块或某个它的catch子句产生的值或异常之上。如:
- def f(): Int = try { return 1 } finally { return 2 }
调用f()产生结果值2。相反:
- def g(): Int = try { 1 } finally { 2 }
调用g()产生1。这两个例子展示了有可能另大多数程序员感到惊奇的行为,因此通常最好还是避免从finally子句中返回值。最好是把finally子句当作确保某些副作用,如关闭打开的文件,发生的途径。
Scala与Java中try-finally行为差异
本文探讨了Scala与Java中try-finally结构的行为差异,特别是在finally子句返回值或抛出异常时的不同表现。文章通过两个具体示例说明了这种差异,并建议将finally用于确保副作用发生。
1047

被折叠的 条评论
为什么被折叠?



