До тех пор, пока у нас есть PartialFunction[X,R]
, очень легко преобразовать его в функцию, возвращающую Option[R]
, например.
def pfToOptf[X, R](f: PartialFunction[X,R])(x: X) =
if (f.isDefinedAt(x)) Some(f(x))
else None
Однако, если задача противоположна: предположим, что у меня есть функция f
, получающая X
в качестве аргумента и возвращающая Option[R]
в результате. И я хочу сделать PartialFunction[X,R]
из него. Каков наилучший способ?
То, что я придумал, выглядит довольно уродливо на мой вкус:
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 }
}
Есть ли лучший способ, который я пропустил?