Как правило, когда вы видите throw new Error()
в исходном коде библиотечного класса, он представляет собой точку, где компилятор вмешивается и реализует метод, соединяясь со средством платформы (помните, что это может быть Java или .NET ).
* SID Array объясняет, как обрабатывать массивы в Scala 2.7.x, и как они изменились в 2.8. Компилятор, используемый для магического преобразования объекта в BoxedArray
, если вы вызвали map
.
В 2.8 интеграция массивов в инфраструктуру коллекций Scala в значительной степени осуществляется с использованием обычных функций языка - неявных преобразований из Array[T]
в WrappedArray[T]
или ArraySeq[T]
, в зависимости от контекста, и неявных параметров типа Manifest[T]
для поддержки создания массивов универсального типа T
. Массив , индексирование , длина и update по-прежнему отображаются как throw new Error()
. Array#map
больше не существует, вместо этого вы найдете это в WrappedArray
и ArraySeq
как обычный метод.
UPDATE
Если вам интересно узнать, как определяется магия этого компилятора, взгляните на Scala 2.8 воплощение Cleanup.scala .