微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Scala 3 中用类型参数区分联合类型

如何解决在 Scala 3 中用类型参数区分联合类型

在 Scala 3 中,给定这样的类型别名:

type Test[A] = A | Option[A]

val first: Test[String] = "gandalf"
val second: Test[String] = None
val third: Test[String] = Some("sam")

如何区分我遇到的两种情况(AOption[A])中的哪一种?

在尝试编写代码时,我认为主要问题在于编译器和类型,包括 Either[String,B],matches A`。我什至不知道我的问题是否有惯用的解决方案。

这是我最好的尝试,其他任何一个都失败了:

def get[A](input: Test[A]): A =
  input match
    case Some(value) => value.asInstanceOf[A]
    case None        => throw new RuntimeException("Error!")
    case _           => input.asInstanceOf[A]

get(first) // "gandalf"
get(second) // Exception!!!
get(third) // sam"

如您所见,value 未被识别为与类型参数 A 的类型相同,并且在运行时无法真正检查底部A 情况(尝试case a: A => 给出了一个编译错误)所以我通过排除其他两个来捕获它。这看起来不是最佳解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。