Zrozumienie błędów kompilacji

Zrozumienie błędów kompilacji

> LeekScript samouczek

Kodujesz swoją sztuczną inteligencję jak błogosławiony. Linie przewijają się, a nazwy bardzo logicznych zmiennych i funkcji, takich jak sfatyu_2 następują jedna po drugiej, życie jest dobre... Nagle ! Klawisz „zapisz” jest wciśnięty, a twój kod jest sprawdzany przez kompilator. Podtrzymuje twoje spojrzenie, intensywnie... I tu jest dramat! Jedna (lub więcej!) duża czerwona linia pojawia się na dole edytora. Co mogą oznaczać te dziwne i ezoteryczne magiczne formuły?

Ten przewodnik ujawni wam prawdę, abyście i wy mogli stać się znawcami.

W tym miejscu oczekiwano zakończenia instrukcji

Koniec instrukcji? Tak, to „;” na końcu każdej linii. Ten komunikat wskazuje linię, w której brakuje jednej z tych cyfr. Bądź jednak ostrożny! wskazana linia jest ogólnie linią poprzedzającą lub następującą po inkryminowanej.

!Brak jednego;

Tutaj brakuje „;” na końcu linii 18, a komunikat mówi nam, że linia przed useWeapon nie ma średnika!

Poprawka: moveToward(enemy);

Nieoczekiwany koniec pliku

Bardziej podstępny! To ten sam błąd, co poprzedni, ale tym razem jest to ostatnia linia twojej sztucznej inteligencji, która nie ma średnika. !nieokreślony EoF

Poprawka: useWeapon(enemy);

Może to być również spowodowane niezamkniętym String: !EoF 2

Poprawka: say("Wygrałem!");

Nieznana zmienna lub funkcja

Kto zapomniał zadeklarować swoją zmienną? Krótki powrót do samouczka dotyczącego Zmiennych i samouczka dotyczącego Funkcji może okazać się przydatny.

!zmienna lub nieznana funkcja

Tutaj zmienna enemy nie jest zadeklarowana. Najpierw musisz go utworzyć za pomocą słowa kluczowego var. Poprawka: var wróg = getNearestEnemy();

A w takim razie dla tego? !ex nieznana funkcja

Cóż, autor jest po prostu małpą z klawiaturą i nie zauważył, że użył getNeerest (które nie istnieje) zamiast getNearest, zadeklarowanego tuż powyżej.

Ta nazwa zmiennej jest niedostępna

Nie można ponownie zadeklarować zmiennej o tej samej nazwie co zmienna już zadeklarowana.

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

Korekta (brzydka): var moi2 = 1 Lepszym rozwiązaniem byłoby użycie nazw, które naprawdę pasują do roli twoich zmiennych.

Ostrzeżenie: ten błąd może również wystąpić z powodu nazwy zmiennej globalnej.

Ten błąd spadnie również na ciebie, jeśli użyjesz przecinka zamiast czcigodnego średnika: ![](https://imgur.com/cCpqtxS.png)

Poprawka: var wróg = getNearestEnemy();

Wynika to z deklaracji zmiennej wbudowanej: var zmienna1 = 1, zmienna2 = 2; jest całkowicie poprawną składnią (patrz Zmienne).

Ta nazwa funkcji jest niedostępna

Podobnie jak w przypadku poprzedniego błędu, nie można ponownie użyć nazwy funkcji, która była już używana.

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

Poprawka (bardzo brzydka): funkcja getNearest2() {

Nie można użyć tej nazwy parametru

Więc próbujemy użyć nazwy zmiennej globalnej jako nazwy parametru, tak? Czy wiesz, ile może cię to kosztować, jeśli pokłócisz się z jednym z moich mniej przyjaznych kolegów?

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

Korekta :

Oczekiwany nawias zamykający

Jak wskazuje komunikat o błędzie, we wskazanym wierszu brakuje nawiasu. !Źle, jeśli

Tutaj wiersz 19 kodu powinien brzmieć if (not isAlive(enemy)) {

Oczekiwano tutaj wartości

Wywołanie funkcji nie zostało zamknięte? Oto, co otrzymasz! !oczekiwana wartość

Napraw moveToward(enemy);

Nieprawidłowa liczba parametrów

Parametry? kezako? Szybka recenzja samouczka Funkcje jest w porządku!

!niepoprawny parametr

Tutaj funkcja moveToward przyjmuje od 1 do 2 parametrów, a my dajemy jej 0. Oczywiście kompilator uderza nas w palce. Napraw moveToward(enemy); lub moveToward(enemy, mp); z mp liczbą.

Zauważ, że otrzymasz ten sam błąd, jeśli podasz funkcji zbyt wiele parametrów (Eg: moveToward(enemy, mp, thing);).

Nie wszystkie bloki zostały zamknięte

Co to jest blok? To fragment kodu otoczony przez { }. Tutaj otworzyliśmy blok za pomocą { bez jego zamykania. !bloki nie zamknięte

Tutaj brakuje } po końcu if. Dlatego kompilator wskazuje koniec bieżącego bloku (tutaj koniec pliku), aby wskazać, że zapomnieliśmy zamknąć wszystkie bloki. Korekta :

Brak bloków do zamknięcia

Ta sytuacja jest odwrotnością poprzedniej. Zamknęliśmy blok av