2012-02-28 26 views
7

Có cách nào để truy cập val được tạo trong khối try/catch trong khối cuối cùng không? hoặc là khối cuối cùng nằm ngoài phạm vi.Cuối cùng là "nằm ngoài phạm vi" trong khối try/catch

def myTryCatch: Either[Exception, String] = { 
    try { 
    val w = runOrFailWithException("Please work...") 
    Right(w) 
    } catch { 
    case ex: Exception => { 
     Left(ex) 
    } 
    } 
    finally { 
    // How do I get access to Left or Right in my finally block. 
    // This does not work 
    _ match { 
     case Right(_) => 
     case Left(_) => 
    } 
    } 
} 
+1

Bạn không, cuối cùng chỉ có thể xem công cụ tuyên bố ra khỏi phạm vi try/catch, không bên trong của nó. –

Trả lời

12

Tại sao bạn cần thực hiện việc này trong khối finally? Kể từ khi một try/catch là một biểu thức, bạn có thể kết hợp vào giá trị của nó:

try { 
    val w = runOrFailWithException("Please work...") 
    Right(w) 
} catch { 
    case ex: Exception => Left(ex) 
} match { 
    case Right(_) => 
    case Left(_) => 
} 
+0

Cảm ơn bạn, điều này đang hoạt động rất tốt. Tất nhiên, tôi không cần 'cuối cùng' ở đây. - Java vẫn còn đâu đó ở phía sau đầu tôi. –

+1

Trên thực tế sự kiện của bạn không cần khớp;) chỉ cần làm những gì bạn muốn với các giá trị bên trong các mệnh đề try và catch và sau đó "return" chúng) – tuxSlayer

+0

Nếu Java vẫn còn ở phía sau đầu của bạn, bạn phải biết rằng các quy tắc phạm vi để thử ..catch..finally giống nhau trong Java. –

Các vấn đề liên quan