我需要初始化一组val,初始化它们的代码可能会抛出异常。我很想写:初始化可能抛出异常的值
try {
val x = ... generate x value ...
val y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
但是这(显然)不起作用,因为x和y不在try的范围之外。
这很容易通过使用可变变量来解决这个问题:
var x: Whatever = _
var y: Whatever = _
try {
x = ... generate x value ...
y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
但是,这不完全是很不错的。
它也很容易通过复制异常处理来解决这个问题:
val x = try { ... generate x value ... } catch { ... exception handling ... }
val y = try { ... generate y value ... } catch { ... exception handling ... }
... use x and y ...
但是,这涉及到复制的异常处理。
必须有一个“很好”的方式,但它躲过我。
也许你利用延迟vals在下一次访问时重新计算它们的值的事实,如果在初始化过程中引发异常? – soc