Пока у нас есть 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 }
}
Есть какой-то лучший способ, который я пропустил?