Скала применить метод - PullRequest
0 голосов
/ 17 марта 2012

если List(1,2,3) преобразуется в List.apply(1,2,3), то почему new Array[String](3) не преобразуется в новый массив [String] .apply (3)?

Я пробовал Array.apply (3), но семантикаотличается от new Array[String](3).

Ответы [ 3 ]

3 голосов
/ 17 марта 2012

Когда вы вызываете new Array[String](3), вы вызываете конструктор Array для класса Array с одним аргументом: 3. В качестве альтернативы, когда вы вызываете Array(3), вы вызываете метод apply для Объект массива . В Java это называется вызовом статического метода. Это то же самое, что звонить Array.apply(3), как вы ожидали.

2 голосов
/ 17 марта 2012

использование new означает, что механизм является не функциональным приложением, а конструкцией. Код «переводит» на выделение памяти и вызов конструктора.

1 голос
/ 17 марта 2012

Остерегайтесь разницы между

val a = new Array(3)

и

val a = Array(3)

Первый создает новый Array объект с 3 null элементами; второй создает новый объект Array с одним элементом, который равен 3.

Array(3) переводится в Array.apply(3), точно так же, как List(3) переводится в List.apply(3).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...