Potrzebuję zainicjować zestaw vals, gdzie kod do ich inicjowania może rzucić wyjątek. Chciałbym napisać:Inicjowanie vals, które mogą rzucić wyjątek
try {
val x = ... generate x value ...
val y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
Ale to (oczywiście) nie działa, ponieważ x i y nie znajdują się poza próbą.
Łatwo rozwiązać problem za pomocą zmiennych Zmienna:
var x: Whatever = _
var y: Whatever = _
try {
x = ... generate x value ...
y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
Ale to nie jest dokładnie to bardzo miłe.
Jest to także łatwy do rozwiązania problemu przez powielenie obsługę wyjątków:
val x = try { ... generate x value ... } catch { ... exception handling ... }
val y = try { ... generate y value ... } catch { ... exception handling ... }
... use x and y ...
Ale to wymaga powielenie obsługę wyjątków.
Musi być "miły" sposób, ale umyka mi.
Być może wykorzystujesz fakt, że leniwe vale przeliczają swoją wartość przy następnym dostępie, jeśli wyjątek zostanie zgłoszony podczas ich inicjowania? – soc