Я прошу базовое c Scala обучение, предлагаемое здесь: https://www.lynda.com/Scala-tutorials/Scala-Essential-Training-Data-Science/559182-2.html и на вводном разделе, где инструктор представляет коллекции, он выполняет эти команды в REPL (используя Scala v2.11):
scala> val myRange = 1 to 10
myRange: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> val myRange2 : Range = new Range(1, 101, 2)
myRange2: Range = Range(1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99)
Предполагаемый тип становится типом объекта: scala.collection.immutable.Range.Inclusive
, а явно типизированный - просто: Range
.
Кроме того, в версии 2.13 из Scala (текущая версия, которую я установил до отката до версии для инструкторов), те же команды приводят к:
scala> val myRange = 1 to 10
myRange: scala.collection.immutable.Range.Inclusive = Range 1 to 10
scala> val myRange2 : Range = new Range(1, 101, 2)
^
error: class Range is abstract; cannot be instantiated
У инструктора нет никаких объяснений относительно этих типов, которые кажется, отличаются, и я изо всех сил пытаюсь понять, почему ошибка возникает в более новой версии Scala? Был ли класс Range ранее не абстрактным классом? И если да, то почему это изменилось?