问题 Scala随着时间的推移(以及为什么)删除了哪些语法选项/语言功能? [关闭]


标题几乎总结了我的问题。

案例类继承的弃用和删除是一个非常新的,我想知道在此之前哪些事情被删除/实质上改变了。我记得一些事情 val in for循环和不同的名称 object 以及一些 requires 关键词。

我很想看到代码示例,说明事情的使用方式/以后如何更换它们,以及实际版本何时发生以及理由为何!

PS:每个答案一个项目似乎是个好主意!


11711
2017-07-25 09:39


起源

许多语法更改列在附录中 ScalaReference。 - Debilski


答案:


在Scala 2.7中有可能声明类型的东西 int (没有资本“我”)。由于Scala不支持原始值的概念,并尽可能地与所有内容保持一致,因此不推荐使用此“功能”。


3
2017-07-25 10:06



Afaik大多数社区成员不喜欢这样的事实,即一些类型以小写字母开头,一些以大写字母开头,它们在2.8左右的大写字母周围“标准化”...... - soc


案例类继承是一个短暂的特性:它在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

5
2017-07-25 21:42





requires 在2.6版中不推荐使用该子句。

trait A requires B {
  ...
}

现在写成:

trait A { self: B =>
  ...
} 

我不知道这种语法改变背后的基本原理。我个人觉得 requires 语法有点可读性。


3
2017-07-26 08:09



我在这里猜测,它不适合类似的东西 trait A extends B requires C with D 等等......你可能需要很多括号,以明确什么需要什么......等等...... - agilesteel


我不知道所有的细节,但从这里开始有一个非常详细的版本历史:

http://www.scala-lang.org/node/155

实际上列出了每个版本中的每个项目。许多都有JIRA门票的链接。

挖掘这些数据可能需要一段时间,但我怀疑你所寻找的大部分内容都存在。您可能没有详细看到的是弃用的基本原理,但是如果给出了JIRA票证或至少记录了该功能的指示,则对该主题的Web搜索应该导致讨论页面和基本原理。


2
2017-07-25 09:45



还有“Scala语言更改”页面: scala-lang.org/node/43 我正在寻找的是一些具体的例子及其背后的基本原理...... - soc
这是我在答案中提出的更好的链接。我看了几个删除的功能(scala.compat.math 和 assertSame并且确实看起来在许多情况下找出弃用的原因很难。这里有很棒的想法征集意见! - Ray Toal


for comprehensions在每个生成器之前使用关键字“val”。下一个Scala版本将不再具有此功能,但是,目前仍然接受以下不推荐使用的语法:

for (val i <- 1 to 10) yield i

这被认为是不必要的冗长。


2
2017-07-25 21:41



这仍然适用于2.10.0.r25323-b20110719020429 ... - soc
@soc我当然可能会弄错。但我可以发誓,我看到了删除它的提交。好吧,我可能弄错了。 - Daniel C. Sobral
我发誓我也看到了,这就是为什么我想知道... :-) - soc


类文字(不同于 classOf[]从语言中删除了,但我无法弄清楚它们的样子,但可能就像它们的Java等价物一样 .class


0
2017-08-30 09:21