除了闭包(Java似乎没有闭包之外),这是Java中缺少的Scala功能列表。我将在此处省略库,而将重点放在语言本身的功能上。这无论如何都不是全面的,但我认为它包含了大笔票。
- 隐式参数/转换
- 模式匹配,案例类
- 类型推断(某些)
- 种类较多的类型(对类型构造函数的抽象)
- 单调的
for
理解 - 方差注释
- 行为界面(特征)
- 默认和命名参数
- 统一的方法和运算符(方法可以用作中缀运算符,运算符可以重载,因为它们只是方法)
- 统一的类型层次结构;没有原始类型
- 属性而不是getter和setter
- 抽象值
- 一流的不可变引用(
val
与一样容易声明var
) - 按名称(懒惰)术语(也许Java闭包使之易于表达)
- 一些尾调用递归优化
- 抽象类型
- 类型别名
- 自我类型
- 路径相关类型
- 结构类型
- 类型 归属 ,从类型来区分 _铸造
- 重命名进口
- 一流的模块(对象)
- 一流的套餐
- 泛型泛型(清单)
- 定界的延续
这些构建块可以实现一些很酷的辅助构造:
- 类型类(通过隐式参数和更高种类的类型)
- “ Pimp我的书架”模式(通过隐式转换)
- 内部DSL(通过运算符重载和infix方法)
- 解析器组合器(由高阶函数启用,并由infix方法修饰)
- 生成器,协程,自定义控制结构(通过定界延续)
- 类型级别的编程(通过更高种类的抽象类型)
- 依赖注入框架的过时(通过Cake模式)
最后,我要提到的是Scala具有REPL(读取-评估-打印-循环)功能-并不是语言本身的功能,但是拥有它非常好!



