加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala Nothing数据类型

发布时间:2020-12-16 18:56:57 所属栏目:安全 来源:网络整理
导读:我知道 Scala没有什么是底层类型.当我看到API时,它从“Any”扩展,这是层次结构中的顶层. 现在,由于Scala不支持多重继承,我们怎么能说它是底层类型.换句话说,它不直接继承所有类或特征,如Seq,List,String,Int等.如果是这种情况我们怎么能说它是所有类型的底部
我知道 Scala没有什么是底层类型.当我看到API时,它从“Any”扩展,这是层次结构中的顶层.

现在,由于Scala不支持多重继承,我们怎么能说它是底层类型.换句话说,它不直接继承所有类或特征,如Seq,List,String,Int等.如果是这种情况我们怎么能说它是所有类型的底部?

我的意思是,如果我们能够将List [Nothing](Nil)分配给List [String],因为List在scala中是协变的,因为Nothing和String类型之间没有直接关联.我们知道什么都不是底层类型,但我很难看到String和Nothing之间的关系,就像我在上面的例子中所说的那样.

谢谢&问候,
穆罕默德

解决方法

Now since Scala does not support multiple inheritance

Scala确实支持使用trait mixin进行多重继承.这当前不是可交换的,即A与B的类型与B与A不相同(这将与Dotty一起发生),但它仍然是多重继承的形式,实际上是Scala的一个优点,因为它解决了钻石问题通过其线性化规则.

顺便说一下,Null是另一个底层类型,继承自Java(也可以说它有一个Nothing底类型,因为你可以在任何可能的地方抛出运行时异常).

我认为你需要区分类继承和类型边界.将Nothing定义为底部类型没有矛盾,尽管它没有“明确地”继承任何你想要的类型,例如List.它更像是一种能力,即抛出异常的能力.

if we are able to assign List[Nothing] (Nil) to List[String] as List is covariant in scala how it is possible because there is no direct correlation between Nothing and String type

是的,底层类型的想法是Nothing(在许多其他事物中)也是String的子类型.所以你可以写

def foo: String = throw new Exception("No")

这只能起作用,因为Nothing(抛出异常的类型)比声明的返回类型String更具体.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读