如何解决在 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")
如何区分我遇到的两种情况(A
或 Option[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 举报,一经查实,本站将立刻删除。