Является ли этот ответ от компилятора действительным?
Следующий код вызывает ошибку. Я не мог найти никакой информации об этом в ссылке. Отсутствие пробелов в правой части оператора '=' является ошибкой.
let names =["Anna", "Alex", "Brian", "Jack"]
Любая другая комбинация этого синтаксиса компилируется. Кто-нибудь знает, действительно ли это действительно недействительный синтаксис за то, что мы знаем о Swift прямо сейчас?
EDIT: Ответ на ошибку: Prefix/postfix '=' is reserved
ОТВЕТ: Этот отрывок, кажется, отвечает на мой вопрос. Я просто не мог найти его в течение долгого времени:
Пробелы вокруг оператора используются для определения того, оператор используется как префиксный оператор, постфиксный оператор или двоичный оператор. Это поведение суммируется в следующих правилах:
Если оператор имеет пробелы вокруг обеих сторон или вокруг них стороны, он рассматривается как двоичный оператор. В качестве примера, + оператор в + b и a + b рассматривается как двоичный оператор. Если оператор имеет пробелы только с левой стороны, он рассматривается как префикс унарного оператора. В качестве примера оператор ++ в ++ b рассматривается как префикс унарного оператора. Если оператор имеет пробелы на только с правой стороны, он рассматривается как постфиксный унарный оператор. Как Например, оператор ++ в ++ b рассматривается как постфикс унарный оператор. Если оператор не имеет пробелов слева, а соблюдается сразу же точкой (.), он рассматривается как постфиксный унарный оператор. Например, оператор ++ в ++. B рассматривается как постфикс унарный оператор (a ++. b, а не ++.b).
Отрывок из: Apple Inc. "Быстрый язык программирования". интерактивные книги. https://itun.es/us/jEUH0.l
Ответы
Ответ 1
Добавьте пробел после =
. (=[
выглядит слишком грустно, чтобы быть оператором.) Вероятно, он видит =value
как использование префикса (возможно, но не реализовано).
Swift не является полностью белым-агностиком, например C... в частности, он использует пробелы, чтобы отличать префикс от постфиксных операторов (потому что ++i++
в C - некоторая грамматическая нечетность). Но это не смехотворно строго о пропущенных словах, как Python.
Ответ 2
Попробуйте добавить пробел между =
и [
.
Когда знак равенства находится непосредственно перед скобкой, компилятор предполагает, что вы пытаетесь выполнить префиксную операцию в массиве.
Ответ 3
Поместите пробел между =
и [
,
let names = ["Anna", "Alex", "Brian", "Jack"]
Кажется, что =[
является зарезервированным оператором.