Понимание ошибок компиляции

Понимание ошибок компиляции

> Учебник LeekScript

Вы программируете свой ИИ как благословенный. Строки прокручиваются, и имена очень логичных переменных и функций, типа sfatyu_2 следуют одно за другим, жизнь удалась... Внезапно ! Нажимается клавиша «сохранить», и ваш код проверяется компилятором. Он поддерживает ваш взгляд, интенсивно... А вот и драма! Внизу вашего редактора появляется одна (или несколько!) больших красных линий, что могут означать эти странные и эзотерические магические формулы?

Это руководство откроет вам правду, чтобы вы тоже могли стать знающими.

Здесь ожидался конец оператора

Конец обучения? Да, это ";" в конце каждой строки. Это сообщение указывает на строку, в которой отсутствует одна из этих цифр. Будьте осторожны! указанная строка обычно является строкой, предшествующей или следующей за инкриминируемой строкой.

!Отсутствует;

Здесь отсутствует ";" в конце строки 18, и в сообщении говорится, что в строке перед useWeapon нет точки с запятой!

Исправлено: moveToward(враг);

Неожиданный конец файла

Коварнее! Это та же ошибка, что и предыдущая, но на этот раз это последняя строка вашего ИИ без точки с запятой. !unexp EoF

Исправлено: useWeapon(враг);

Это также может быть связано с незакрытым String: !EoF 2

Исправлено: говорить("Я выиграл!");

Неизвестная переменная или функция

Кто забыл объявить свою переменную? Краткий возврат к учебнику по Переменным и учебнику по Функциям может оказаться полезным.

!var или func неизвестен

Здесь переменная enemy не объявлена. Вы должны сначала создать его с помощью ключевого слова var. Исправлено: var враг = getNearestEnemy();

А для этого тогда? !бывшая неизвестная функция

Что ж, автор просто обезьяна с клавиатурой и не заметил, что он использовал getNearest (которого не существует) вместо getNearest, объявленного чуть выше.

Это имя переменной недоступно

Вы не можете повторно объявить переменную с тем же именем, что и уже объявленная переменная.

![](https://imgur.com/Qx5n006.png)

Исправление (некрасивое): var moi2 = 1 Лучшим решением было бы использовать имена, которые действительно соответствуют роли ваших переменных.

Предупреждение: Эта ошибка также может появляться из-за имени глобальной переменной.

Эта ошибка упадет и на вас, если вместо почитаемой точки с запятой вы поставите запятую: ![](https://imgur.com/cCpqtxS.png)

Исправлено: var враг = getNearestEnemy();

Это связано с объявлением встроенной переменной: var переменная1 = 1, переменная2 = 2; - вполне корректный синтаксис (см. Переменные).

Это имя функции недоступно

Как и в случае с предыдущей ошибкой, вы не можете повторно использовать имя функции, которое уже использовалось.

![](https://imgur.com/UUfrixR.png)

Исправление (очень некрасивое): function getNearest2() {

Нельзя использовать это имя параметра

Итак, мы пытаемся использовать имя глобальной переменной в качестве имени параметра, да? Ты знаешь, чего тебе может стоить, если ты поссоришься с одним из моих менее дружелюбных коллег?

![](https://imgur.com/xnAOUAV.png)

Исправление:

Ожидается закрывающая скобка

Как видно из сообщения об ошибке, в указанной строке отсутствуют скобки. !неправильно, если

Здесь строка 19 кода должна быть if (not isAlive(enemy)) {

Здесь ожидалось значение

Вызов функции не закрыт?? Вот что вы получите! !ожидаемое значение

Исправить moveToward (враг);

Неверное количество параметров

Параметры? кезако? Краткий обзор учебника Функции в порядке!

!неверный параметр

Здесь функция moveToward принимает от 1 до 2 параметров, а мы даем ей 0. Очевидно, что компилятор бьет нас по пальцам. Исправьте moveToward(enemy); или moveToward(enemy, mp); с числом mp.

Обратите внимание, что вы получите ту же ошибку, если вы дадите слишком много параметров функции (Например: moveToward(enemy, mp, thing);).

Не все блоки закрыты

Что такое блок? Ну, это часть кода, окруженная { }. Здесь мы открыли блок с {, не закрывая его. !блоки не закрыты

Здесь } отсутствует после конца if. Поэтому компилятор указывает конец текущего блока (здесь конец файла), чтобы показать, что мы забыли закрыть все блоки. Исправление:

Нет блоков для закрытия

Эта ситуация обратна предыдущей. Мы закрыли блок av