Подтвердить что ты не робот

Какие параметры синтаксиса/языковые функции сделали Scala удалить со временем (и почему)?

Название в значительной степени подводит итог моему вопросу.

Устранение и удаление наследования класса case является довольно новым, и мне интересно, какие вещи были удалены/существенно изменены до этого. Я помню что-то о val для циклов и другое имя для object, а также некоторое ключевое слово requires.

Мне бы хотелось увидеть примеры кода того, как были использованы/как они были заменены позже, с реальной версией, когда это произошло, и с обоснованием почему!

PS: Один элемент за каждый ответ кажется хорошей идеей!

4b9b3361

Ответ 1

В Scala 2.7 было возможно объявить вещи типа int (без капитала "I" ). Поскольку Scala не поддерживает идею примитивных значений и старается быть максимально согласованным со всем, насколько это возможно, эта "функция" устарела.

Ответ 2

Наследование класса класса было недолговечным: оно было введено в 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

Ответ 3

Предложение

requires устарело в версии 2.6.

trait A requires B {
  ...
}

теперь записывается как:

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

Я не знаю обоснования этого синтаксического изменения. Я лично считаю синтаксис requires немного более читаемым.

Ответ 4

Я не знаю всех деталей из рук в руки, но здесь начинается чрезвычайно подробная история версий:

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

В списке перечислены все элементы, включенные в каждый выпуск. Многие из них имеют ссылки на билеты JIRA.

Может потребоваться некоторое время для моих данных, но я подозреваю, что большая часть того, что вы ищете, есть. То, что вы, возможно, не видите подробно, является обоснованием для устаревания, но если дается билет JIRA или указание на эту функцию, по крайней мере, записано, веб-поиск по этой теме должен привести к странице обсуждения и обоснованию.

Ответ 5

Для понимания использовалось ключевое слово "val" перед каждым генератором. Следующая версия Scala больше не будет иметь этого, но в настоящее время сохраняется следующий устаревший синтаксис:

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

Это просто считалось излишне подробным.

Ответ 6

Литералы класса (отличные от classOf[]) были удалены с языка, но я не мог понять, как они выглядели, но, вероятно, как их эквивалент Java .class.