You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala 3中能否实现可靠的Not[A]类型?

能否在Scala 3中实现可靠的Not[A]类型?

多年前曾有人讨论过类似问题,遗憾的是基于“not given A <:< B”的方案在涉及抽象类型时会失效——这犯了“缺乏证据不等于证据不存在”的逻辑谬误。

从技术角度来说,借助宏可以验证表达式类型,若类型信息不全则抛出错误,但我想要的方案不止能处理“not A <:< B”的情况,还需要仅在A with B实际等价于Nothing时生效:也就是其中一个类型为sealed/final,且两个类型无法混合。此外,这种场景下无需知晓两个类型的完整信息:比如若A是final类型,那么只要B的上界不是类型变量或A即可。

动机示例

sealed trait Marker
sealed trait A[X]
final class Special[X <: Marker] extends A[X]
final class Generic[X :Not[Marker]#Proof] extends A[X]

在上述示例中,若有a: A[Marker],则可以确定a.asInstanceOf[Special[Marker]]是安全的。


内容的提问来源于stack exchange,提问作者Turin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:47:05