scala – 如果没有类型在类层次结构的底部,为什么我不能调用任何
发布时间:2020-12-16 09:20:29 所属栏目:安全 来源:网络整理
导读:Scala类型Nothing表示(据我所知)类型层次结构的底部,也用符号⊥表示.也就是说,没有任何给定类型的子类型.对于我们没有理论背景的人来说,对于没有类型的要求是 explained well by James Iry的要求! 所以我的问题是,如果Nothing是每种类型的子类型,为什么我不
Scala类型Nothing表示(据我所知)类型层次结构的底部,也用符号⊥表示.也就是说,没有任何给定类型的子类型.对于我们没有理论背景的人来说,对于没有类型的要求是
explained well by James Iry的要求!
所以我的问题是,如果Nothing是每种类型的子类型,为什么我不能在Nothing上调用任何类型的方法?显然,我不能实例化没有,但是为什么下面的编译呢? var n: Nothing = _ def main(args: Array[String]) { println(n.length) //compile error: value length is not a member of Nothing } 当然没有什么是String的子类型应该可以吗?请注意以下编译很好! var n: Nothing = _ def foo(s: String) : Int = s.length def main(args: Array[String]) { println(foo(n)) } 一样: def main(args: Array[String]) { println(n.asInstanceOf[String].length) } 解决方法
虽然Nothing是一切的子类型,但它不会继承任何方法,除了Any中的那些.这是因为没有什么更适合语言的功能结束.它需要像Option和List这样的东西,但只能作为一个类型,而不是一个类.
这里的区别对于面向对象的背景的人来说有点奇怪,但事实上,作为概念的子类型与OOP非常不同.面向对象真的意味着以某种形式进行子类型化,但反之亦然.本杰明·皮尔斯的类型和编程语言很好地展示了语言F_<(发音为“F sub”),它作为一种使用子类型(而不是OO)的语言的最小示例. 现在,所有这一切,我同意,没有任何东西免于正常继承规则的事实似乎有点不一致.然而,从理论的角度来说,这是完全正确的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- -bash: git: command not found
- Bootstrap基本插件学习笔记之Popover提示框(19)
- Advanced Programming in UNIX Environment Epis
- 使用scala在classpath下读取属性文件
- gsoap的使用(调用webservice)
- 【webservice】生成axis2的webservice客户端代码
- 利用webservice(copy.asmx)为sharepoint上传文
- Scala:我如何编写sortBy所具有的函数类型?
- 使用scala在Apache spark中连接不同RDD的数据集
- scala – sbt程序集任务在添加一些依赖项后运行缓
热点阅读