Scala Nothing数据类型
我知道
Scala没有什么是底层类型.当我看到API时,它从“Any”扩展,这是层次结构中的顶层.
现在,由于Scala不支持多重继承,我们怎么能说它是底层类型.换句话说,它不直接继承所有类或特征,如Seq,List,String,Int等.如果是这种情况我们怎么能说它是所有类型的底部? 我的意思是,如果我们能够将List [Nothing](Nil)分配给List [String],因为List在scala中是协变的,因为Nothing和String类型之间没有直接关联.我们知道什么都不是底层类型,但我很难看到String和Nothing之间的关系,就像我在上面的例子中所说的那样. 谢谢&问候, 解决方法
Scala确实支持使用trait mixin进行多重继承.这当前不是可交换的,即A与B的类型与B与A不相同(这将与Dotty一起发生),但它仍然是多重继承的形式,实际上是Scala的一个优点,因为它解决了钻石问题通过其线性化规则. 顺便说一下,Null是另一个底层类型,继承自Java(也可以说它有一个Nothing底类型,因为你可以在任何可能的地方抛出运行时异常). 我认为你需要区分类继承和类型边界.将Nothing定义为底部类型没有矛盾,尽管它没有“明确地”继承任何你想要的类型,例如List.它更像是一种能力,即抛出异常的能力.
是的,底层类型的想法是Nothing(在许多其他事物中)也是String的子类型.所以你可以写 def foo: String = throw new Exception("No") 这只能起作用,因为Nothing(抛出异常的类型)比声明的返回类型String更具体. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |