Miễn là chúng ta có PartialFunction[X,R]
, thật dễ dàng chuyển đổi nó thành hàm trả về Option[R]
, ví dụ:Cách chuyển đổi X => Option [R] thành PartialFunction [X, R]
def pfToOptf[X, R](f: PartialFunction[X,R])(x: X) =
if (f.isDefinedAt(x)) Some(f(x))
else None
Tuy nhiên, những gì nếu nhiệm vụ là ngược lại: giả sử tôi có một hàm f
nhận X
như một cuộc tranh cãi và trở Option[R]
như một kết quả. Và tôi muốn thực hiện PartialFunction[X,R]
trong số đó. cách tốt nhất là gì?
Những gì tôi đã đi lên với vẻ bề ngoài khá xấu xí để hương vị của tôi:
def optfToPf[X,R](f: X => Option[R]) : PartialFunction[X,R] = {
object extractor {
def unapply(x: X): Option[R] = f(x)
}
{ case extractor(r) => r }
}
Có một số cách tốt hơn tôi đã bỏ lỡ?
có thể trùng lặp của [Inverse của phương thức nâng của PartialFunction] (http://stackoverflow.com/questions/5902266/inverse-of-partialfunctions-lift-method) –
@ToddOwen Tôi chỉ tò mò "trước" có nghĩa là gì bạn trong câu "câu hỏi này đã được hỏi trước". Vui lòng chỉ cần so sánh ngày của cả hai câu hỏi. –
Đóng phiếu bầu đã rút lại. Xin lỗi, nó không phải là vấn đề "trước", mà đúng hơn là câu hỏi khác dường như đã nhận được một câu trả lời tốt hơn (với 28 phiếu). Nhưng bây giờ tôi nhận thấy rằng Thayne đã trả lời như vậy ở đây. –