int[] arr = {1, 2, 3};
arr = {1, 2, 3} //Error
arr = new int[] {1, 2, 3}; //No Error
Так что мой вопрос: почему это так? Я имею в виду разницу между строкой 2 и линией 3?Array literal применим только для декларации?
int[] arr = {1, 2, 3};
arr = {1, 2, 3} //Error
arr = new int[] {1, 2, 3}; //No Error
Так что мой вопрос: почему это так? Я имею в виду разницу между строкой 2 и линией 3?Array literal применим только для декларации?
Вот как работает Java или C#, не может на это жаловаться. Если мы придем к семантике языка программирования, строка 2 вводит некоторую двусмысленность, которая на самом деле не нужна, и если мы думаем о действительно продвинутых вещах например, дерево разбора , которое должно быть построено для оператора, такого как строка 2, мы сталкиваемся с большими проблемами.
читал некоторые вещи о анализаторах, если Вам нравится link to parse trees
Это просто, как указано на языке Java. Независимо от того, считаете ли вы, что язык может или должен поддерживать ошибочный синтаксис, он просто этого не делает. –
Не все, что придумали отцы языка Java, составляет 100% смысла. Поскольку я даже не могу думать о причине, почему эти правила упрощали бы парсинг. – GhostCat
Является ли это java или C#? Пожалуйста, не помещайте вопрос как – Rob