11

Tytuł prawie podsumowuje moje pytanie.Jakie opcje składni/funkcje języka Scala usunęły z czasem (i dlaczego)?

Deprecjonacja i usunięcie dziedziczenia klasy spraw są całkiem nowe i zastanawiam się, które rzeczy zostały usunięte/znacznie zmienione przed tym. Pamiętam coś o val w pętli i inną nazwę dla object, a także niektóre słowa kluczowe requires.

Chciałbym zobaczyć przykłady kodu, jak rzeczy były używane/jak zostały one zastąpione później, z rzeczywistą wersją, kiedy to się stało iz uzasadnieniem, dlaczego!

PS: Jeden element na odpowiedź wydaje się być dobrym pomysłem!

+0

Wiele zmian w składni znajduje się w dodatku do [ScalaReference] (http://www.scala-lang.org/docu/files/ScalaReference.pdf). – Debilski

Odpowiedz

3

W Scali 2.7 można było zadeklarować rzeczy typu int (brak kapitału "I"). Ponieważ Scala nie wspiera idei prymitywnych wartości i stara się być tak spójna ze wszystkim, o ile może, ta "cecha" jest przestarzała.

+2

Afaik większości członków społeczności nie podoba się fakt, że niektóre typy zaczynają się od małych liter, a niektóre z dużymi literami, "standaryzują" wokół wielkich liter około 2,8 ... – soc

2

Nie znam wszystkich szczegółów bezceremonialny, ale jest niezwykle szczegółowa wersja historii począwszy tutaj:

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

Praktycznie każdy element, który udał się do każdego wydania jest na liście. Wiele z nich zawiera linki do biletów JIRA.

Kopiowanie tych danych może zająć trochę czasu, ale podejrzewam, że większość tego, czego szukasz, jest dostępna. Czego nie możesz zobaczyć w szczegółach, to uzasadnienie dla deprecjacji, ale jeśli podany jest przynajmniej bilet JIRA lub przynajmniej informacja o funkcji, wyszukiwanie w Internecie na ten temat powinno prowadzić do strony dyskusji i uzasadnienia.

+3

Istnieje również strona "Zmiany w języku Scala": http://www.scala-lang.org/node/43 Czego szukam to konkretne przykłady i uzasadnienie tego ... – soc

+0

To jest dużo lepiej link to ten, który umieściłem w mojej odpowiedzi. Przyjrzałem się kilku usuniętym funkcjom ('scala.compat.math' i' assertSame') i wygląda na to, że poznanie przyczyn deprecjacji w wielu przypadkach będzie trudne. Więc świetny pomysł, by ściągnąć tu dane! –

2

Do obliczeń użyto słowa kluczowego "val" przed każdym generatorem. Kolejna wersja Scala nie będzie już to, ale obecnie następujące składnia Nieaktualne jest nadal akceptowane:

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

To właśnie uznana za nadmiernie gadatliwe.

+0

To nadal działa w wersji 2.10.0.r25323-b20110719020429 ... – soc

+0

@oc, oczywiście mogę się mylić. Ale mógłbym przysiąc, że widziałem, jak to usunięto. Cóż, mogę się mylić. –

+0

Mogę przysiąc, że ja też to widziałem, dlatego się zastanawiam ... :-) – soc

5

Dziedziczenie z klasy dziedziczenia było krótkotrwałe: zostało wprowadzone w wersji 2.7, przestarzałe w wersji 2.8/2.9 i ostatecznie usunięte w wersji 2.10.

Przykład:

case class Foo(a: Int, b: Int) 
case class Bar extends Foo(42, 43) 

Problemem było to, że automatycznie dostarczane implementacje równości tak naprawdę nie działa w obliczu spadku, dlatego ta funkcja została usunięta.

Usuwanie klasy sprawa dziedziczenia ma również dobry efekt: Pozwoli to lepiej dostarczający wpisywanych product*** metod przez dziedziczenie betonowej ProductN cechę:

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 klauzula została przestarzałe w wersji 2.6.

trait A requires B { 
    ... 
} 

jest teraz zapisana jako:

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

nie wiem za uzasadnienie tej zmiany składni.Osobiście uważam, że składnia requires jest nieco bardziej czytelna.

+1

Zgaduję, że nie pasowało to do czegoś w stylu 'cecha A rozciąga się B wymaga C z D' i tak na ... Prawdopodobnie będziesz potrzebował mnóstwa nawiasów, aby wyjaśnić, co wymaga czego i tak dalej ... – agilesteel

0

Literały klas (różne od classOf[]) zostały usunięte z języka, ale nie mogłem dowiedzieć się, jak one wyglądały, ale prawdopodobnie podoba im się ich odpowiednik Javy .class.

Powiązane problemy