Devo inizializzare un set di vals, in cui il codice per inizializzarli potrebbe generare un'eccezione. Mi piacerebbe scrivere:Inizializzazione di vals che potrebbero generare un'eccezione
try {
val x = ... generate x value ...
val y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
Ma questo (ovviamente) non funziona perché xey non sono portata al di fuori della prova.
E 'facile risolvere il problema utilizzando le variabili mutabili:
var x: Whatever = _
var y: Whatever = _
try {
x = ... generate x value ...
y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
Ma non è esattamente molto bello.
E 'anche facile da risolvere il problema duplicando il gestione delle eccezioni:
val x = try { ... generate x value ... } catch { ... exception handling ... }
val y = try { ... generate y value ... } catch { ... exception handling ... }
... use x and y ...
Ma che coinvolge duplicare il gestione delle eccezioni.
Ci deve essere un modo "carino", ma mi sfugge.
Forse si sfrutta il fatto che i valori lazy valgono il loro valore all'accesso successivo se viene generata un'eccezione durante l'inizializzazione? – soc