标题几乎总结了我的问题。
案例类继承的弃用和删除是一个非常新的,我想知道在此之前哪些事情被删除/实质上改变了。我记得一些事情 val
in for循环和不同的名称 object
以及一些 requires
关键词。
我很想看到代码示例,说明事情的使用方式/以后如何更换它们,以及实际版本何时发生以及理由为何!
PS:每个答案一个项目似乎是个好主意!
标题几乎总结了我的问题。
案例类继承的弃用和删除是一个非常新的,我想知道在此之前哪些事情被删除/实质上改变了。我记得一些事情 val
in for循环和不同的名称 object
以及一些 requires
关键词。
我很想看到代码示例,说明事情的使用方式/以后如何更换它们,以及实际版本何时发生以及理由为何!
PS:每个答案一个项目似乎是个好主意!
在Scala 2.7中有可能声明类型的东西 int
(没有资本“我”)。由于Scala不支持原始值的概念,并尽可能地与所有内容保持一致,因此不推荐使用此“功能”。
案例类继承是一个短暂的特性:它在2.7中引入,在2.8 / 2.9中弃用,最后在2.10中删除。
例:
case class Foo(a: Int, b: Int)
case class Bar extends Foo(42, 43)
问题是,自动提供的等式实现在继承方面并没有真正起作用,因此删除了此功能。
删除case类继承也有很好的效果:
它将允许提供更好的类型 product***
通过继承具体方法 ProductN
特征:
val f = Foo(1,2).productIterator
f: Iterator[Any] = non-empty iterator // < 2.10
f: Iterator[Int] = non-empty iterator // 2.10 with -Xexperimental
requires
在2.6版中不推荐使用该子句。
trait A requires B {
...
}
现在写成:
trait A { self: B =>
...
}
我不知道这种语法改变背后的基本原理。我个人觉得 requires
语法有点可读性。
我不知道所有的细节,但从这里开始有一个非常详细的版本历史:
http://www.scala-lang.org/node/155
实际上列出了每个版本中的每个项目。许多都有JIRA门票的链接。
挖掘这些数据可能需要一段时间,但我怀疑你所寻找的大部分内容都存在。您可能没有详细看到的是弃用的基本原理,但是如果给出了JIRA票证或至少记录了该功能的指示,则对该主题的Web搜索应该导致讨论页面和基本原理。
for comprehensions在每个生成器之前使用关键字“val”。下一个Scala版本将不再具有此功能,但是,目前仍然接受以下不推荐使用的语法:
for (val i <- 1 to 10) yield i
这被认为是不必要的冗长。
类文字(不同于 classOf[]
从语言中删除了,但我无法弄清楚它们的样子,但可能就像它们的Java等价物一样 .class
。