Scala 2.0.0
Версия реализации Scala for JVM языка программирования ScalaВерсия Scala 2.0.0 выпущена 12 марта 2006.
Основные изменения относительно версии Scala 1.4.0.4:
- полностью переписан компилятор Scala
-
экспериментально поддерживает Java generics (опция
-Xgenerics
) - Java инсталлятор использует IzPack вместо InstallAnywhere
Изменения в синтаксисе языка
Добавлены три новых ключевых слова, которые не могут быть использованы в качестве идентификаторов: implicit
, match
, requires
Новая строка может быть использована в качестве разделителя выражений наравне с ;
Ключевое слово match
теперь используется как инфиксный оператор между выражением и множеством вариантов:
expr match {
case Some(x) => ...
case None => ...
}
//старые варианты вида отныне не работают
expr.match {...}
match {...}
Изменен синтаксис с with
:
//отныне старый вариант не поддерживается
class C with M { ... }
//и считается правильными ниже приведенные варианты
class C extends AnyRef with M { ... }
class C extends M { ... }
class C extends S with M { ... }
Поддерживается форма регулярных выражений, которая заканчивается символами _*
:
case List(1, 2, _*) => ... // соответствуют варианты начинающиеся с 1,2
Изменен синтаксис объявления типов. Старый синтаксис поддерживается компилятором, но считается устаревшим:
// старый синтаксис
class C: T extends B { ... }
// новый синтаксис
class C requires T extends B { ... }
Выражение for
отныне может принимать значения и использовать по образцу определения:
for {
val x <- List.range(1, 100)
val y <- List.range(1, x)
val z = x + y
isPrime(z)
} yield Pair(x, y)
Правила преобразования неявных методов к функциям были изменены. В результате изменений некоторые вполне легальные конструкции в прошлом считаются неверными:
def sum(f: int => double)(a: int, b: int): double = if (a > b) 0 else f(a) + sum(f)(a + 1, b)
val sumInts = sum(x => x) // ошибка: отсутствует аргумент
val sumInts: (int, int) => double = sum(x => x) // верный вариант
Были ослаблены требования к пустым спискам параметров. Это позволило отказаться от использования метода с явным, но пустым списком параметров. Ниже приведенный пример отныне является вполне легальным:
class C {
override def toString: String = //...
}
Параметры класса могут теперь быть описаны с префиксами val
или var
Изначально язык Scala содержал 3 уровня видимости private
, protected
и public
. Но не было возможности ограничить доступ к членам текущего пакета, как я Java. Были произведены изменения:
private[C] def f(...) // доступ к `f` будет ограничен в пределах класса или пакета С (который содержит определение `f`)
Изменена работа с неявными параметрами в соответствии с общим понятием неявных параметров
Комментарии
]]>blog comments powered by Disqus
]]>