如何解决使部分功能完整
是否有完成部分功能PartialFunction[A,B]
的标准方法?像这样:
completePartialFunction(pf: PartialFunction[A,B],z: B): A => B
或
completePartialFunction2(pf: PartialFunction[A,f: A => B): A => B
解决方法
您可以在lift
上使用PartialFunction
方法,该方法返回Option[B]
。因此,当未为输入定义函数时,将返回None
。您可以在scaladocs中找到更多信息。
我想到的另一种解决方案是使用cats或scalaz时。然后,您可以检查是否为参数定义了函数,如果没有定义,请从empty
返回Monoid[B]
,您应该(可能是隐式)将其传递给completePartialFunction
。
是的,实际上很简单:
def complete[A,B](pf: PartialFunction[A,B])(f: A => B): A => B =
pf.applyOrElse(_,f)
,
如果我理解这个问题,则希望使用f()
来补充pf()
,以便涵盖类型A
的所有可能值。
def completePartialFunction2[A,B](pf : PartialFunction[A,B],f : A => B): A => B =
(a:A) => if (pf.isDefinedAt(a)) pf(a) else f(a)
,
另一个简单版本:
def completePartialFunction[A,f: A => B): A => B
= pf orElse { case a: A => f(a) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。