gpt4 book ai didi

scala - 将函数转换为部分函数 scala

转载 作者:行者123 更新时间:2023-12-03 03:32:37 27 4
gpt4 key购买 nike

我有一个密封的特质:

sealed trait ActorMessage
case class AddX(x: Int) extends ActorMessage
case class RemoveX(x: Int) extends ActorMessage

我还有一个函数来处理所有消息并警告我有关非详尽匹配的信息:

def handleMessage: ActorMessage => Unit = {
case AddX(x) => ...
case RemoveX(x) => ...
}

Actor 需要 PartialFunction[Any, Unit]。 PartialFunction 扩展了 Function,这意味着我无法将我的 Function 分配给 PartialFunction。

我编写了简单的转换器:

def liftToPartialFunction[FUND <: PFUND, B, PFUND](f: Function[FUND, B]): PartialFunction[PFUND, B] = new PartialFunction[PFUND, B] {
override def isDefinedAt(x: PFUND): Boolean = x.isInstanceOf[FUND]
override def apply(v1: PFUND): B = f(v1.asInstanceOf[FUND])
}

但是有更好的方法吗?或者标准 scala 库中是否有等效项?

最佳答案

您可以使用Function.unlift -

val f: Throwable => Option[String] = {
case e: NullPointerException => Some("nah it's ok")
case e => None
}

Future(null.toString).recover(Function.unlift(f))
// Future(Success(nah it's ok))

关于scala - 将函数转换为部分函数 scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31425913/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com