Zapisałem się na intensywny bootcamp programowania komputerowego, Maker Academy, w przyszłym miesiącu. Aby się rozruszać pomyślałem, że będę pracował nad książką Zeda Shawa Learn Ruby the Hard Way.

Ćwiczenie 25 wydaje się testować moje umiejętności rozwiązywania problemów, więc pomyślałem, że napiszę post dokumentujący jak rozpracowałem i naprawiłem moje komunikaty o błędach. Ten post jest skierowany do początkujących w świecie programowania, ponieważ wyobrażam sobie, że są to bardzo podstawowe rzeczy, które dostaję źle.

To była moja pierwsza próba napisania skryptu do ćwiczenia 25 w moim edytorze:

Gdy uruchomiłem to w terminalu dostałem następujący komunikat o błędzie:

ex25.rb:2:in `<main>': undefined local variable or method `ex25' for main:Object (NameError)

Pierwszą rzeczą jaką zrobiłem było wygooglowanie komunikatu o błędzie.

Rozwiązanie komunikatu o błędzie za pomocą Google

Znalazłem odpowiedź na Stackoverflow.

Powiedział mi, że przypadkowo wpisywałem Alt + Space na moim Macu, tworząc w ten sposób przestrzeń niełamiącą się. Jest to traktowane przez Rubiego jako część nazwy zmiennej, w przeciwieństwie do białych spacji, które miały być.

Podał dwa rozwiązania tego problemu:

1. Remapping Alt + Space to space to stop this typo occurring again.

2. Highlighting invisible characters in text editor to immediately realise the literówki.

The preference seemed to be for solution 2 so I thought I would try this way first. Wydawało się to najprostsze i najszybsze do naprawienia. Chciałem wykluczyć problem off-the-shelf do mojego zepsutego kodu.

Podświetl niewidzialne znaki w moim edytorze tekstu – Część 1

Następnie wygooglowałem, jak podświetlić niewidzialne znaki za pomocą mojego edytora tekstu, Sublime Text editor 2.

Okazuje się, że ma to być domyślna funkcja mojego edytora tekstu.

Za każdym razem, gdy zaznaczam tekst, powinienem być w stanie zobaczyć małe białe kropki, jak na poniższym obrazku (spójrz uważnie, są tam w pustych miejscach):

Więc zaznaczyłem tekst i nic się nie stało:

Postanowiłem na razie zaparkować tutaj problem „niełamiących się” spacji i spróbować rozwiązać mój komunikat o błędzie łatwiejszym sposobem. Jestem stosunkowo nowy w kodowaniu, więc następne rozwiązanie dla znalezienia 'niełamiących się’ spacji; naprawianie preferencji lub domyślnych przypisań klawiszy w edytorze Sublime Text, nie wydawało się najprostszym sposobem na rozwiązanie mojego problemu.

Googlowanie samego ćwiczenia

Następną rzeczą jaką zrobiłem było google 'Ex25 learn Ruby the hard way’ aby zobaczyć czy ktoś inny miał te same problemy co ja. Znalazłem blog z rozpisanym ćwiczeniem. Porównałem nasze pliki słowo w słowo na moim ekranie.

Nie widziałem żadnej różnicy między naszymi plikami (wskazując, że ukryte spacje mogą być tym, co powoduje mój błąd).

Jednakże musiałem wykluczyć pomysł, że gdzieś jest literówka, której nie mogłem dostrzec, więc wypisałem cały plik ponownie. Pomyślałem, że jest to szybszy sposób na dotarcie do rozwiązania.

Mój drugi plik zadziałał, gdy uruchomiłem go w terminalu. Brak komunikatu o błędzie.

Tutaj jest drugi plik:

Zaintrygowało mnie, gdzie popełniłem błąd w pierwszym pliku, więc porównałem je linia po linii.

Porównanie działającego skryptu z tym z komunikatem o błędzie

Porównałem je na moim ekranie i zauważyłem dwie różnice, które po kolei naprawiłem.

1. Kiedy wcześniejsze funkcje były wywoływane w późniejszych, np.

def ex25.print_first_and_last(sentence)
words = ex25.break_word .. etc

Funkcja ex25.break_word wyglądała tak, jakby nie została rozpoznana w skrypcie błędu (ten po prawej), podczas gdy Ex25. pojawił się na niebiesko w innym skrypcie (po lewej).

Najbardziej oczywistym powodem, jaki mogłem wymyślić, było to, że 'e’ nie było pisane wielką literą. Zmieniłem więc wszystkie Ex25 w uszkodzonym skrypcie na wielkie e.

Uruchomiłem skrypt, ale wciąż otrzymywałem ten sam komunikat o błędzie:

ex25.rb:2:in `<main>': undefined local variable or method `ex25' for main:Object (NameError)

2. Następną łatwą poprawką, którą zauważyłem, była nazwa pliku i nazwa funkcji w uszkodzonym skrypcie były takie same, ale w moim nowym skrypcie nazwałem plik EX25b.rb.

Może to ta różnica w nazewnictwie była odpowiedzialna za błąd?

Nie ..

ex25.rb:2:in `<main>': undefined local variable or method `ex25' for main:Object (NameError)

Gdybym przeczytał całe ćwiczenie w Learning Ruby the Hard Way zobaczyłbym, że to nie jest odpowiedź:

„Moduł Ex25 nie musi być w pliku o nazwie ex25.rb. Spróbuj umieścić go w nowym pliku o losowej nazwie, a następnie zaimportuj ten plik i zobacz, jak nadal masz dostęp do Ex25.”

Więc zdecydowałem się wrócić do pierwszego rozwiązania, niełamiącego spacji, ponieważ wyczerpałem już łatwe opcje i nie mogłem do końca życia zobaczyć żadnej różnicy między błędem a poprawnym skryptem.

Podświetl niewidzialne znaki w moim edytorze tekstu- Część 2

Czytałem jak to zrobić tutaj.

1. Otwórz „preferencje” w edytorze tekstu Sublime & wybierz „przypisania klawiszy”.

2. Wstawić po lewej stronie, w zakładce „użytkownik” następujący kod:

{
"keys": ,
"command": "insert_snippet",
"args": {"contents": " "}
}

3. Zapisałem, a następnie ponownie otworzyłem oryginalny (uszkodzony 🙁 ) plik.

Wystarczyło, że był tam przypadkowy Alt i spacja niełamiąca spacji:

HALLELUJAH … pomyślałem…. W końcu naprawiłem mój stary skrypt…….

Uruchomiłem go ponownie i nadal miałem ten sam komunikat o błędzie!

Tutaj prawdopodobnie powinienem był pomyśleć:

„Już raz się poprawiłem i udało mi się przepracować ćwiczenie i je ukończyć. Po prostu nazwę to dniem i nie będę się martwił o plik, który zwraca komunikat o błędzie”.

Ale jestem zbyt ciekawski / uparty, by zadowolić się pozwoleniem na to, by błąd wisiał nad moim pierwszym skryptem.

Uruchomiłem irb w terminalu.

Wprowadziłem plik, który miałem poprawny ponownie & plik z komunikatem o błędzie:

Próbowałem ustalić, jaka jest różnica między tymi dwoma plikami.

Może chodzi o katalogi, w których zostały zapisane?

Sprawdziłem i okazało się, że zostały zapisane w różnych katalogach.

Zapisałem więc plik błędu w tym samym katalogu, co plik, który działał…. Nadal komunikat o błędzie!!!

Nie widziałem żadnej innej różnicy, więc ….

Kopiowałem i wkleiłem tekst z działającego pliku do pliku błędu.

Wtedy stało się coś strasznego!

Oba pliki przestały działać!!!!

Ten sam komunikat o błędzie pojawił się dla pierwszego pliku, a teraz plik roboczy zwracał 'false’, gdy 'wymagałem’ go za pomocą irb:

Prawdopodobna przyczyna tego problemu:

Zbyt wiele plików o tej samej lub podobnej nazwie w tym samym katalogu?

Usunąłem wszystkie oprócz jednego… I jak magia …

UDAŁO SIĘ !!!

Uruchomiłem skrypt roboczy dla Ex25 w terminalu i postępowałem zgodnie z instrukcjami jak używać irb do wywoływania jego funkcji.

Tutaj są moje wyniki i moje wyjaśnienie tego, co się dzieje:

Prawidłowy skrypt dla Ex25

Uruchamianie skryptu w wierszu poleceń. 'irb’

Oznaczyłem punkty, w których musiałem trochę pomyśleć o tym, jak to działa. Oto moje wyjaśnienie:

1. Drukuje 'wait’, ponieważ funkcja działa na tablicy 'words’, która nie jest posortowana. Posortowana tablica nazywa się 'sorted_words’.

2. Tablica 'Words’ ma pierwszą i ostatnią (’all’ i 'wait’ ) wartość przesuniętą w funkcji print.

3. Wywołanie na tablicy 'sorted_words’, a nie na tablicy 'words’, która ma brakujące wartości. Dlatego 'wszystkie’ są nadal w tablicy.

4….Wygląda na to, że brakuje wartości w obrazie … Więc wyraźnie uznałem to za nieistotne wtedy, dlatego zrobię to samo teraz..

5. Używając oryginalnej zmiennej „zdanie” i przekazując ją przez funkcję. Rozbija ona tę zmienną zdania na tablicę za każdym razem, gdy napotyka spację. Następnie używając funkcji Ex25.sort_words do posortowania tej tablicy słów.

6. Bierze oryginalną zmienną 'sentence’, rozbija ją na tablicę słów a następnie drukuje pierwszą i ostatnią wartość tej tablicy.

Więc doszliśmy do końca moich zmagań z ćwiczeniem 25 z Learn Ruby the Hard way. Mam nadzieję, że podobało Ci się i uznałeś za użyteczne rozwiązywanie moich problemów, które ostatecznie doprowadziły mnie do pokonania komunikatów o błędach podawanych przy uruchamianiu skryptu. Proszę, skontaktuj się ze mną jeśli przez przypadek czytasz to & i potrzebujesz pomocy w zrozumieniu tego.

Enjoy, 🙂

Ten post został oryginalnie opublikowany TUTAJ.

Articles

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.