câu trả lời Nicolas Rinaudo của liên quan đến gọi getOrElse
ở hai chiếu left
hoặc right
có lẽ là gần nhất với Option.getOrElse
.
Ngoài ra, bạn có thể fold
sự hoặc là:
scala> val x: Either[String,Int] = Right(5)
x: Either[String,Int] = Right(5)
scala> val a: String = x.fold(l => "left", r => r.toString)
a: String = 5
Như l
không được sử dụng trong các lần ở trên, bạn cũng có thể viết x.fold(_ => "left", r => r.toString)
Edit: Trên thực tế, bạn có thể theo nghĩa đen có Option.getOrElse
bằng cách gọi số toOption
trên số máy chiếu left
hoặc right
của một trong hai, ví dụ:
scala> val o: Option[Int] = x.right.toOption
o: Option[Int] = Some(5)
scala> val a: String = o.map(_.toString).getOrElse("left")
a: String = 5
Nguồn
2013-10-21 23:01:47
Tại sao bạn không thích 'Either'? –
@Kevin đây là ý kiến cá nhân của tôi chỉ, nhưng tôi thấy rằng có hai trường hợp mà nó hữu ích: để trả lại một thất bại hoặc thành công, hoặc trả lại một trong hai kết quả có thể. Trước đây là tốt hơn phục vụ bằng cách sử dụng một 'Try' và sau này chỉ có vẻ như lập trình cẩu thả - Tôi cảm thấy rằng nếu phương pháp của tôi có thể trả về một' String' hoặc 'Date', ví dụ, nó có thể làm với một số refactoring. –
Tôi nghĩ rằng nó hữu ích trong một khuôn khổ xác nhận để trả về thành công hay thất bại. API công khai sau đó sẽ cho bạn biết loại thành công/thất bại nào có thể trả về, ngay cả khi chúng là các lớp tùy chỉnh statefull, trong khi tránh việc sử dụng các ngoại lệ đã kiểm tra. Một ví dụ tôi hiện đang làm việc trên là một khuôn khổ sự kiện tìm nguồn cung ứng, mà sẽ gửi một sự kiện dựa trên một số xác nhận. Đó có thể là loại sự kiện được mong đợi hoặc một số loại "Sự kiện không hợp lệ" – Guillaume