我试图将我的思想从 Java 背景(和一点 Scala 2)迁移到 Scala 3,并实现一种版本,PartialFunction.orElse但使用联合类型作为输入参数而不是交叉类型:
trait F[A, B] extends (A => B) {
def orElse[A1, B1](other: F[A1, B1]): F[A | A1, B | B1] = {
val self = this
new F[A | A1, B | B1] {
override def apply(v: A | A1): B | B1 = {
helper(v)
}
transparent inline def helper(v: A | A1): Any = {
inline v match {
case _: A => self.apply(v.asInstanceOf[A])
case _: A1 => other.apply(v.asInstanceOf[A1])
} …Run Code Online (Sandbox Code Playgroud)