Tôi cần phải khởi tạo một tập hợp các vals, trong đó mã để khởi tạo chúng có thể ném một ngoại lệ. Tôi muốn viết:Khởi tạo các vals có thể ném một ngoại lệ
try {
val x = ... generate x value ...
val y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
Nhưng điều này (rõ ràng) không hoạt động vì x và y không nằm ngoài phạm vi thử.
Thật dễ dàng để giải quyết vấn đề bằng cách sử dụng các biến có thể thay đổi:
var x: Whatever = _
var y: Whatever = _
try {
x = ... generate x value ...
y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
Nhưng đó không hẳn là rất tốt đẹp.
Nó cũng dễ dàng để giải quyết vấn đề bằng cách sao chép các xử lý ngoại lệ:
val x = try { ... generate x value ... } catch { ... exception handling ... }
val y = try { ... generate y value ... } catch { ... exception handling ... }
... use x and y ...
Nhưng điều đó liên quan đến việc sao chép các xử lý ngoại lệ.
Phải có một cách "đẹp", nhưng nó đang cản trở tôi.
Có thể bạn khai thác thực tế là các vals lười sẽ tính lại giá trị của chúng vào lần truy cập tiếp theo nếu ngoại lệ được ném trong khi khởi tạo chúng? – soc