если List(1,2,3) преобразуется в List.apply(1,2,3), то почему new Array[String](3) не преобразуется в новый массив [String] .apply (3)?
List(1,2,3)
List.apply(1,2,3)
new Array[String](3)
Я пробовал Array.apply (3), но семантикаотличается от new Array[String](3).
Когда вы вызываете new Array[String](3), вы вызываете конструктор Array для класса Array с одним аргументом: 3. В качестве альтернативы, когда вы вызываете Array(3), вы вызываете метод apply для Объект массива . В Java это называется вызовом статического метода. Это то же самое, что звонить Array.apply(3), как вы ожидали.
Array(3)
Array.apply(3)
использование new означает, что механизм является не функциональным приложением, а конструкцией. Код «переводит» на выделение памяти и вызов конструктора.
new
Остерегайтесь разницы между
val a = new Array(3)
и
val a = Array(3)
Первый создает новый Array объект с 3 null элементами; второй создает новый объект Array с одним элементом, который равен 3.
Array
null
Array(3) переводится в Array.apply(3), точно так же, как List(3) переводится в List.apply(3).
List(3)
List.apply(3)