我正在探索 Scala 语言。我经常听到的一个说法是 Scala 有一个stronger类型系统优于 Java。我认为人们的意思是:
-
scalac
拒绝某些有缺陷的程序javac
会愉快地编译,只会导致运行时错误。
- 某些不变量可以在 Scala 程序中进行编码,这样编译器就不会让程序员编写违反条件的代码。
我这样想对吗?
Scala 类型系统的主要优点并不在于stronger而是远离richer (see "Scala 类型系统 https://web.archive.org/web/20110122231742/http://programming-scala.labs.oreilly.com/ch12.html").
(Java 可以定义其中一些,并实现其他一些,但 Scala 内置了它们)。
也可以看看, 评论史蒂夫·叶格的博客文章 http://steve-yegge.blogspot.com/2008/06/rhinos-and-tigers.html,他将 Scala“鄙视”为“弗兰肯斯坦的怪物”,因为“有类型类型,也有类型类型”。
- 使用值类型类(对于具有值语义的相当小的数据结构很有用)而不是基元类型(Int、Double 等),并隐式转换为“Rich”类以获取其他方法。
- 不可空类型 https://stackoverflow.com/questions/1522367/library-support-for-scalas-notnull-trait
- 单子类型 http://debasishg.blogspot.com/2008/03/monads-another-way-to-abstract.html
- 特质类型(以及混合成分 http://debasishg.blogspot.com/2006/04/scala-compose-classes-with-mixins.html随之而来的)
- 单例对象类型(只需定义一个“对象”,您就拥有一个),
-
复合类型 http://www.scala-lang.org/node/110(对象类型的交集,表示一个对象的类型是其他几种类型的子类型),
-
功能类型 http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-6 (
(type1, …)=>returnType
句法),
-
案例类 http://www.scala-lang.org/node/107(常规类导出其构造函数参数并通过模式匹配提供递归分解机制),
-
路径依赖类型 http://programming-scala.labs.oreilly.com/ch12.html#PathDependentTypes(允许嵌套类型的语言提供了引用这些类型路径的方法),
-
匿名类型 http://www.scala-lang.org/node/133(用于定义匿名函数),
-
自我类型 http://www.scala-lang.org/node/124(可例如在 Trait 中使用 http://markthomas.info/blog/?p=92),
-
类型别名 http://davetron5000.github.com/scala-style/naming_conventions/type_aliases.html, 随着:
-
封装对象 https://stackoverflow.com/questions/1605976/using-type-aliases-to-java-enums(2.8中引入)
-
Generic types http://www.scala-lang.org/node/113 (like Java), with a type parameter annotation mechanism http://www.scala-lang.org/node/129 to control the subtyping behavior of generic types,
- 协变泛型类型:注释
+T
声明类型T
仅用于协变位置。Stack[T]
是一个子类型Stack[S]
if T
是一个子类型S
.
- 逆变泛型类型:
-T
会声明T
仅用于逆变位置。
- 有界泛型类型(尽管Java支持其中的一部分 https://stackoverflow.com/questions/1751275/are-there-any-plans-for-java-to-add-generic-collection-covariance),
-
高等种类 https://blogs.atlassian.com/2013/09/scala-types-of-a-higher-kind/,它允许表达比 Java 泛型更高级的类型关系,
-
抽象类型 http://www.scala-lang.org/node/105(泛型类型的替代),
-
存在主义类型 https://stackoverflow.com/questions/292274/what-is-an-existential-type (used in Scala https://stackoverflow.com/questions/1031042/scalas-existential-types就像 Java 通配符类型),
-
隐式类型 http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-6 (see "Scala 的强大之处是显而易见的 http://technically.us/code/x/the-awesomeness-of-scala-is-implicit",
-
查看有界类型 http://www.scala-lang.org/node/130, and
-
结构类型 http://langexplr.blogspot.com/2007/07/structural-types-in-scala-260-rc1.html,用于通过指定所需类型的特征来指定类型(鸭子类型)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)